链接模型的新实例,传递'caller'id

时间:2012-12-02 21:16:41

标签: ruby-on-rails rails-routing

我正在创建一个简单的广告资源应用,有一个列出“商品”的视图。它有包含这些行的表:

<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'传递给它。

2 个答案:

答案 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传递给创建新注释的表单(链接模型)。

这样做:

  1. 将此(或类似的取决于对象名称)添加到调用创建的页面:

    <%= link_to 'Add Comment', new_item_comment_path(@item) %>

  2. new的{​​{1}}和create方法中,有一行以comments_controller开头。在该行下添加:

    @comment = Comment.new AND @item = Item.find(params[:item_id])

  3. 修改评论模板的第一行:@comment.item = @item

  4. 编辑路线,例如:

  5.   

    资源:项目

         

    ...

         

    资源:评论

         

    并阅读本文:http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects

    如前所述,所有归功于@jonallard,他的回答和他的专业知识。