0

我正在创建一个简单的库存应用程序,有一个列出“项目”的视图。它有包含这些行的表:

<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'在创建新模型时如何将其传递给它。

4

2 回答 2

2

URL 助手实际上接受对象来为关联创建路由。意思是,假设您在项目中有一条用于评论的嵌套路由,

resources :items do
  resources :comments
end

你可以link_tonew_item_comments_path(item)

该方法new_item_comments_path(item)基于new_item_comments路由创建一个字符串 URL,您可以输入该 URLlink_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 路由指南对您来说应该是一本有用的读物​​。

现在假设您的 Comment 控制器在正确的位置分配了正确的内容。你似乎已经明白了,但为了清楚起见我会解释一下(以及未来的访客)

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
于 2012-12-03T00:00:36.190 回答
0

所有功劳都应归功于@jonallard

解决方案似乎就是路由,您需要将 url 传递给进行新评论(链接模型)的表单。

去做这个:

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

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

  2. new和 的create方法中comments_controller都有一行开始@comment = Comment.new。在该行下添加:

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

  3. 将评论模板的第一行编辑为:<%= form_for(@comment, {:url => item_comments_path(@item)}) do |f| %>

  4. 将路线编辑为:

资源:项目做

...

资源:评论

结尾

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

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

于 2012-12-03T15:40:04.693 回答