我正在创建一个简单的广告资源应用,有一个列出“商品”的视图。它有包含这些行的表:
<tr>
<td><%= item.title %></td>
<td><%= item.desc %></td>
<td><%= item.value %></td>
<td><%= item.room.name %></td>
<td><%= item.user.username %></td>
<td>
<%= link_to 'View', item %>
<%= link_to 'Edit', edit_item_path(item) %>
<%= link_to 'Delete', item, method: :delete, data: { confirm: 'Are you sure?' } %>
<%= link_to 'Add Comment', !?????! %>
</td>
/tr>
我设置了“评论”的链接模型,但在创建新评论时却不知道如何将'item_id'
传递给它。
答案 0 :(得分:2)
URL helpers实际上接受对象为关联建立路由。这意味着,假设您在项目中有评论的嵌套路线,
resources :items do
resources :comments
end
你可以link_to
new_item_comments_path(item)
。
方法new_item_comments_path(item)
根据new_item_comments
路由生成字符串网址,您可以将其输入link_to
以制作HTML <a>
代码。
为了更清楚,在您看来,您将拥有:
<%= link_to 'View', item %>
<%= link_to 'Edit', edit_item_path(item) %>
<%= link_to 'Delete', item, method: :delete, data: { confirm: 'Are you sure?' } %>
<%= link_to 'Add Comment', new_item_comments_path(item) #-> (instead of ???) %>
在这种情况下,您传递的item
是对当前项目的引用,这允许URL帮助程序从路径为其创建URL。
Rails guide for routing应该对您有用。
现在假设您的评论控制器在正确的位置分配正确的东西。你似乎已经想到了这一点,但我会为了清晰(和未来的访客)而解释
class CommentsController < ApplicationController
# GET /item/:item_id/comments/new
def new
@comment = Comment.new
@item = Item.find(params[:item_id])
@comment.item = @item
# render
end
# POST /item/:item_id/comments
def create
@comment = Comment.new(params[:comment])
@item = Item.find(params[:item_id])
@comment.item = @item
# if @comment.save blah
end
end
答案 1 :(得分:0)
所有信用都应该转到@jonallard
解决方案似乎是关于路由的,你需要将一个url传递给创建新注释的表单(链接模型)。
这样做:
将此(或类似的取决于对象名称)添加到调用创建的页面:
<%= link_to 'Add Comment', new_item_comment_path(@item) %>
在new
的{{1}}和create
方法中,有一行以comments_controller
开头。在该行下添加:
@comment = Comment.new
AND
@item = Item.find(params[:item_id])
修改评论模板的第一行:@comment.item = @item
编辑路线,例如:
资源:项目
...
资源:评论
端
并阅读本文:http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects!
如前所述,所有归功于@jonallard,他的回答和他的专业知识。