【问题标题】:First argument in form cannot contain nil or be empty, rails表单中的第一个参数不能包含 nil 或为空,rails
【发布时间】:2016-04-22 04:16:05
【问题描述】:

尝试使用 form_for,我收到错误“表单中的第一个参数不能包含 nil 或为空”。错误在第一行突出显示: <%= 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

```

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

到目前为止,我的研究表明问题可能出在这些文件中。我已经看到我可以简单地写,,但我想避免这种情况,因为所有人都反对它。这个错误是如何解决的?如何确保第一个参数不为空/nil?(我确实在 Rails 控制台中创建了一个项目)

【问题讨论】:

    标签: ruby-on-rails partials


    【解决方案1】:

    将下面的两个答案放在一起,您应该使用:

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

    并将您的变量称为:

    <%= form_for item do |f| %>
    

    当说locals: { item: @item } 时,你说的是“将实例变量'@item' 作为'item'”

    【讨论】:

    • 对。我只是复制和粘贴,并没有看到。
    • 只是按照您的说明进行了更改。但是,我仍然收到相同的错误消息(有和没有'locals:')
    • 你用的是哪个版本的rails?
    • Rails 4.2.6(根据gem文件)
    • 变量@item 也可以在部分中使用。此变量在控制器的操作、视图和用于此操作的部分之间共享。
    【解决方案2】:

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

    如果您需要确定是否将“本地”传递给部分,请使用 Ruby 的 defined?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多