使用link_to和UJS传递参数

时间:2012-11-21 06:51:11

标签: ruby-on-rails parameters parameter-passing link-to

我很难理解使用link_to和UJS传递参数的正确方法。

我有以下资源:

  • 照片
  • 评论
  • 用户

用户正在尝试通过点击"添加评论来评论照片。"当发生这种情况时,使用UJS弹出一个框,显示使用new.js.erb文件呈现的表单。在"创建评论"发布后,调用create.js.erb文件来处理更新,该文件只是隐藏了注释框并将注释添加到注释列表中。

在我的照片的index.html.erb中,我正在执行以下操作:

我指定了一个链接,用于添加在当前照片的ID中传递的评论。

<%= link_to 'Add Comment', new_comment_path( photo_id: photo.id ), remote: true %>

这给了我网址:0.0.0.0:3000 / comment / new?photo_id = 1,这就是我的期望。

现在我的问题是,如何在我的新动作中处理这个传递参数,以便我可以指定类似

的内容
@comment.photo_id = photo_id 
or 
@comment.photo_id = params[:photo_id] 

在我的comments_controller.rb中?

我可以在JS中做些什么来帮助我将photo_id值保存到@ comment.photo_id列中以添加评论吗?

2 个答案:

答案 0 :(得分:0)

首先,我建议你开始使用嵌套路线来评论或喜欢。你会在这里找到railscast nested_routes_railscast

回到你的问题,在你的控制器中使用@comment.photo_id = params[:photo_id]


有一种更好的方法可以实现此目的,您可以在照片显示页面上显示弹出窗口。在弹出窗口中,您可以拥有新评论模型的表单。点击特定照片后,您只需使用javascript获取该照片的 ID ,然后将其复制到表单中:photo_id 的隐藏字段中。

答案 1 :(得分:0)

是的,您可以按照指定的方式获取params中的photo_id。 假设Photo在您的案例中有很多评论。 所以在你的情况下,你在comments_controller中得到params [:photo_id] 你可以这样做: -

@photo = Photo.find_by_id(params[:photo_id])
@photo.comments.create(params[:comment])

请阅读来自guides.rubyonrails.org的嵌套资源,以便您可以以安静的方式生成创建评论路径。