编辑操作错误(表单中的第一个参数不能包含nil)

时间:2017-05-20 09:45:34

标签: ruby-on-rails

在这个Rails应用程序中,用户可以编写故事并将其添加到集合中。当他们编写故事时,用户可以将其添加到现有集合中,或者通过模态在stories / new.html.erb视图中创建新集合。

我将此工作用于新操作,但编辑操作已损坏。它会抛出一个错误 表格中的第一个参数在此行中不能包含nil或为空

  <%= form_for [@user, @collection] do |f| %>

我的代码看起来像这样

stories_controller.rb

  def new
    @story = Story.new
    authorize @story
    @user = current_user
    @collection = Collection.new
  end

  def edit
    @story = Story.friendly.find(params[:id])
  end

stories / edit.html.erb加载_form.html.erb部分

 <div class="modal-body">
        <%= form_for [@user, @collection] do |f| %>
        <div class="form-group">
          <%= f.label :name %>
          <%= f.text_field :name, class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.label :description %>
          <%= f.text_area :description, class: "form-control collection-desc-input-box", placeholder: "Give it a description (this is optional)" %>
        </div>
        <div class="form-group">
          <%= f.submit class: "btn btn-lakeside" %>
        </div>
        <% end %>
      </div>

routes.rb嵌套资源

  resources :users do
    resources :collections 

修改

通过在编辑操作中放置Collection.new来解决问题。如果有人可以解释发生了什么,那将会很好。我通过反复试验来解决这个问题。感谢。

  def edit
    @story = Story.friendly.find(params[:id])
    @user = current_user
    @collection = Collection.new
  end

2 个答案:

答案 0 :(得分:0)

在您的编辑操作中初始化/设置@user@collection,它们是零,因此错误。由于它们是针对new操作初始化的,因此它正在运行。

您可以针对@user执行以下操作,@collection可以在相应的操作中进行相应的初始化:

before_action :set_user, only: [:new, :edit]

private

def set_user
  @user = current_user
end

答案 1 :(得分:0)

您在商店控制器中错过了@user@collection实例变量。

尝试以下代码:

#stories_controller.rb

  def new
    @story = Story.new
    authorize @story
    @user = current_user
    @collection = Collection.new
  end

  def edit
    @story = Story.friendly.find(params[:id])
    @user = User.find(params[:id])
    @collection = Collection.find(params[:collection_id])
  end