Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4如何以表单形式传递对象id?_Ruby On Rails_Ruby On Rails 4_Form For - Fatal编程技术网

Ruby on rails rails 4如何以表单形式传递对象id?

Ruby on rails rails 4如何以表单形式传递对象id?,ruby-on-rails,ruby-on-rails-4,form-for,Ruby On Rails,Ruby On Rails 4,Form For,我有一个“有很多”评论的公告,评论“属于”公告关系。 在我的根目录下,我按每个循环显示公告,并尝试在每个新闻下制作评论表单 我的根路径操作: def home @announcements = Announcement.page(params[:page]).order('id DESC') end 下面是我的通告: <% @announcements.each do |announcement| %> . .

我有一个“有很多”评论的公告,评论“属于”公告关系。 在我的根目录下,我按每个循环显示公告,并尝试在每个新闻下制作评论表单

我的根路径操作:

  def home
    @announcements = Announcement.page(params[:page]).order('id DESC')
  end
下面是我的通告:

<% @announcements.each do |announcement| %>
           .
           .
           .
        <div class="create_comment form-inline">
                <%= form_for(announcement.comments.build) do |form| %>
                            <%= form.label :author, "Autor:" %>
                            <%= form.text_field :author, class: "form_control" %>

                            <%= form.label :content, "Treść:" %>
                            <%= form.text_field :content, class: "form_control" %>

                            <%= form.submit "Dodaj!", class: "btn btn-primary", url: comments_path %>

                <% end %>
        </div>
    </div>
<% end %>
但我得到一个错误:没有ID就找不到公告

我知道我可以使用隐藏的_字段并将其传递给注释参数,但这不是安全的解决方案


我刚刚开始我的Rails冒险,所以如果有人知道我的错误在哪里,请尝试做出完整的解释

好的,在@notulyses的帮助下,我找到了解决方案

需要进行以下工作:

routes.rb中的第一条:注释需要嵌套在公告中,以便正确加入

  resources :announcements, only: [:new,:create,:update,:edit,:destroy,:show] do
    resources :comments, only: [:create, :destroy]
  end
控制器公告中的第二条注释应通过公告参数找到:

@announcement = Announcement.find(params[:announcement_id])
到第三步,这是我的部分:,我需要为属性设置适当的形式

form_for(announcement.comments.create, url: announcement_comments_path(announcement.id) )
它需要url:param,因为root位于不同的控制器中,然后是注释

尤皮

form_for(announcement.comments.create, url: announcement_comments_path(announcement.id) )