rails - 使用form_for嵌套对象,'形式中的第一个参数不能包含nil或为空'

时间:2016-04-16 05:26:21

标签: ruby-on-rails

我有一个基本的博客网站,我希望允许用户对帖子提供“更正”(只需将其视为评论)。修正对象属于一个帖子,后者又属于一个用户(我正在使用Devise)。

我希望表单能够创建一个新的更正嵌套在帖子的页面中,所以我只是使用protected在posts / show.html.erb中呈现表单。我从corrections / new.html.erb得到'形式中的第一个参数不能包含nil或为空'。我认为问题是在其控制器的新功能中没有正确创建校正。

这是corrections_controller中的新函数:

<% render :template => "corrections/new" %>

这是corrections / new.html.erb中的表单:

def new
    @correction = current_user.post.new
  end

和routes.rb:

<% form_for @correction, html: { multipart: true} do |f| %>
  <div class="field">
    <%= f.label :correction %>
    <%= f.text_field :correction %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

基本上我遇到的问题是我无法弄清楚如何创建属于当前节目页面帖子的新更正对象。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在更正控制器的新操作中,您正在初始化一个后置对象,而不是一个更正对象,因此首先您需要根据路径加载具有前置操作回调的后置对象 如果post和corrections之间的关联是has_many,你必须通过这种方式初始化新操作中的更正对象

before_action load_post

def load_post
  @post = Post.find(params[:post_id])
end

def new
  @correction = @post.corrections.build
end