我很难理解使用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列中以添加评论吗?
答案 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的嵌套资源,以便您可以以安静的方式生成创建评论路径。