rails 4如何在form_for中传递object_id?

时间:2015-04-26 16:55:51

标签: ruby-on-rails ruby-on-rails-4 form-for

我发布了'has_many'评论和评论'belongs_to'公告关系的公告。 在我的根上,我正在显示每个循环的公告,我尝试在每个新闻下发表评论form_for。

我的root_path操作:

  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 %>

以下是我的评论创建行动:

  def create
      @announcement = Announcement.find(params[:comment_id])
    @comment = @announcement.comments.new(comments_params)
    if @comment.save
        flash[:success] = "Komentarz dodano"
        redirect_to root_path
    else
        render 'static_pages/home'
    end
  end   
private

def comments_params
        params.require(:comment).permit(:author,:content)
    end

但是我收到错误:找不到没有ID的公告

我知道我可以使用hidden_​​field并将其传递给comments_params,但这不是安全的解决方案。

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

1 个答案:

答案 0 :(得分:0)

在@notulysses的帮助下,我做到了解决方案。

需要做出改变:

首先在routes.rb中:注释需要嵌套在公告中,才能正确加入。

  resources :announcements, only: [:new,:create,:update,:edit,:destroy,:show] do
    resources :comments, only: [:create, :destroy]
  end

在comments_controller中的第二个公告应该通过announcement_params找到:

@announcement = Announcement.find(params[:announcement_id])

并且通过第三个(这是我的部分:)),我需要正确设置form_for属性。

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

它需要url:param,因为root在不同的控制器中然后是注释。

Yupi !!!!