表单中的第一个参数不能包含nil或为空,rails

时间:2016-04-21 20:04:39

标签: ruby-on-rails partials

尝试使用form_for,我一直收到错误&#34;表单中的第一个参数不能包含nil或为空。&#34;错误在第一行中高亮显示: <%= form_for @item do |f| %> #------error highlited here <%= f.label :Task %> <%= f.text_field :name, placeholder: "What do you have to do?" %> <% end %> 部分: <%= form_for @item do |f| %> <%= f.label :Task %> <%= f.text_field :name, placeholder: "What do you have to do?" %> <% end %> 控制器: ```

class ItemsController < ApplicationController
  def index
    @items = Item.all
  end

  def new
    @item = Item.new
  end

  def create
    @item = Item.new
    @item.name = params[:item][:name]
    @item.user = current_user

    if @item.save
      flash[:notice] = "Item added; go accomplish it!"
    else
      flash.now[:alert] = "Uh oh, it didn't save. Try again."
      render :new
    end
  end

  def show
    @item = Item.find(params[:id])
  end
end

```

并且,show视图(我称之为partial): <%= render partial: 'items/form', item: Item.new, locals: {items: @item} %>

到目前为止,我的研究表明问题可能出在这些文件中。我已经看到我可以简单地写,&lt;%= form_for Item.new do | f | %&gt; ,但我想避免这种情况,因为所有人都建议不要这样做。这个错误是如何修复的?如何确保第一个参数不是空/无?(我确实在Rails控制台中创建了一个项目)

2 个答案:

答案 0 :(得分:1)

将两个答案放在一起,你应该使用:

<%= render partial: 'items/form',  locals: {item: @item} %>

并将您的变量称为:

<%= form_for item do |f| %>

在说locals: { item: @item }时,您正在说&#34;访问实例变量&#39; @ item&#39; as&#39; item&#39;&#34;

答案 1 :(得分:0)

部分地,您的变量可以在没有@前缀的情况下访问(即item)。它们不是实例变量。

如果你需要确定一个&#34; local&#34;被传递给部分人,使用Ruby的defined?