post_attributes的未允许参数

时间:2013-11-26 23:18:35

标签: ruby-on-rails rails-activerecord

所以我试图让我的主题控制器创建一个带有初始帖子的新主题。我的新主题视图看起来像这样

<% @title = "New Topic" %>

<h1>New Topic</h1>

<%= form_for [@topic.forum, @topic] do |f| %>

  <%= render "topic_form", f: f %>

<%= f.submit "Create Topic", class: "btn btn-primary" %>

<% end %>

这里也是部分

<% if @topic.errors.any? %>
<div class="alert alert-danger"> 
<p>The form contains <%= pluralize(@topic.errors.count, "error") %>.</p>
</div>
<ul>
  <% @topic.errors.full_messages.each do |message| %>
  <li class="text-danger"> <%= message %> </li>
  <% end %>
</ul>
<% end %>

<div class='form-group'>
  <%= f.label :title, "Title*" %>
  <%= f.text_field :title, class: 'form-control' %>
</div>

<%= f.fields_for :posts do |post| %>
  <div class='form-group'>
  <%= post.label :content, "Content*" %>
      <%= post.text_area :content, size: "50x6", class: 'form-control' %>
  </div>
<% end %>

主题模型

class Topic < ActiveRecord::Base

 belongs_to :forum
 belongs_to :user
 has_many :posts, :dependent => :destroy

 validates :title, presence: true

 accepts_nested_attributes_for :posts, allow_destroy: true

end

主题控制器

def new
  forum = Forum.find(params[:forum_id])
  @topic = forum.topics.build
  post = @topic.posts.build
end

def create
  forum = Forum.find(params[:forum_id])
  @topic = forum.topics.build(topic_params)
  @topic.last_poster_id = current_user.id
  @topic.last_post_at = Time.now
  @topic.user_id = current_user.id
  if @topic.save then
    flash[:success] = "Topic Created!"
    redirect_to @topic
  else
    render 'new'
  end
end

使用强参数

def topic_params
   params.require(:topic).permit(:title, :post_attributes => [:id, :topic_id, :content])
end

但无论我做什么,它都会打破。开发日志说有

Unpermitted parameters: posts_attributes

我在网上搜索了无数个小时,并没有占上风。任何人都有任何想法如何解决这个问题。现在,当我点击主题新视图中的提交按钮时,它会提交标题,但是你输入的内容会丢失,当我创建一个新帖子时,它工作得很好并打印出用户放入的内容。所以它只是在创建新主题时中断,并且唯一中断的部分是内容部分。

1 个答案:

答案 0 :(得分:0)

您似乎正在提交posts_attributes(请在发布后注意 s )。您定义的参数称为post_attributes