1

我很难理解使用 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 %>

这给了我 url:0.0.0.0:3000/comments/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 列以添加评论?

4

2 回答 2

0

是的,您可以按照您指定的方式在参数中获取 photo_id。假设 Photo 在您的案例中有很多评论。因此,在您的情况下,当您在 comments_controller 中获得 params[:photo_id] 时,您可以执行以下操作:-

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

请从 guides.rubyonrails.org 阅读有关嵌套资源的信息,以便您可以以安静的方式生成创建评论路线。

于 2012-11-21T09:00:53.020 回答
0

首先,我建议您开始使用嵌套路由来处理评论或点赞等内容。你会在这里找到 railscast nested_routes_railscast

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


有一种更好的方法可以做到这一点,您可以在照片展示页面上已有弹出窗口。在弹出窗口中,您可以有一个新评论模型的表单。单击特定照片后,您只需使用 javascript 获取该照片的id并将其复制到表单中:photo_id的隐藏字段中。

于 2012-11-21T08:46:22.213 回答