是否可以在控制器的create动作中引用id属性?

心动

我正在使用bit.ly api,并试图设置控制器的create动作,以便我只能使用api一次,然后将缩短的链接存储在其中,@micropost.link并以这种方式在我的视图中引用它。

microposts_conroller.rb

def create
    @micropost = current_user.microposts.build(micropost_params)
    client = Bitly.client
    url = client.shorten("https://www.myapp.com/microposts/#{@micropost.id}")
    @micropost.link = url.short_url

    respond_to do |format|
      if @micropost.save
        format.html {redirect_to root_url}
        format.js
      else
        @feed_items = []
        @microposts = []
        render 'static_pages/home'
      end
    end
end

是否可以在create动作中引用新创建的微博的id属性?
#{@micropost.id}没有工作,我尝试了其他一些方法,但是没有任何运气。我应该以不同的方式来对待吗?

纳森达

您使用.build只能构建模型,但不保存模型。

保存模型将设置ID。因此,只有在保存模型后才能构建url。

如果保存后未设置ID,则会出现验证错误。

因此您的代码可能看起来像这样:

def create
  @micropost = current_user.microposts.build(micropost_params)

  if @micropost.save
    url = Bitly.client.shorten(micropost_url(@micropost)) 
    @micropost.update_attributes link: url.short_url

    respond_to do |format|
      format.html {redirect_to root_url}
      format.js
    end
  else
    @feed_items = []
    @microposts = []
    render 'static_pages/home'
  end
end

我使用update_attributes它将更新数据库中的参数,这更干净,然后设置链接并节省了第二次时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ASP.NET核心是否可以仅在开发模式下在控制器中配置动作?

控制器中可以有虚拟动作项吗?

我们可以在 Symfony 控制器的表单中定义小部件的 id 属性吗?

是否可以根据控制器ID在页面中使用控制器?

Symfony控制器中动作的含义

控制器动作中的访问模型?

在MVC控制器动作中暂停

在控制器动作中存根类

我可以在Rails 4中从当前控制器渲染另一个控制器的动作吗?

是否可以在 Rails 控制器中链接强参数

是否可以在Spring控制器中拆分请求参数?

如何切换控制器中的动作布尔属性

为每个控制器中的每个动作设置模型属性

Rails:在控制器的所有动作中可见的属性

在过滤器属性中获取区域,控制器和动作名称

如何从控制器动作中调用另一个控制器动作?

在控制器动作中插入另一个控制器动作

是否可以将路由/ users /:id和/ users / me映射到Plumier中的单个控制器中

cocoon gem 是否需要在控制器新动作中构建 n 个模型?

是否可以让NSwag忽略控制器?

如何在Rails 4的控制器内部生成的变量中覆盖create动作

如何将ID传递给控制器中的动作-Ruby on Rails

脱离控制器动作

分解控制器动作

当应用程序在后台时,是否可以从 iOS 中的导航控制器弹出视图控制器?

是否可以将标签栏控制器类中从 Firebase 检索到的数据从标签栏控制器传输到视图控制器?Xcode, 斯威夫特

可以在控制器和模型之外使用 Id 属性吗?

在控制器中可以找到来自NuGet包引用的命名空间

Grails 2.4.2-控制器动作中的本地类