0

对不起,我可能太天真了,这是我第一次使用 StackOverflow,我正在尝试学习 ruby​​。我正在通过 onemonthrails.com 的类似于 pinterest 的教程制作应用程序。我正在尝试添加一个图钉,但我不断收到错误消息:

引脚中的 NoMethodError#new

显示 /Users/jake/code/omrails/app/views/pins/_form.html.erb 其中第 5 行提出:

#Extracted source 的未定义方法“description”(在第 5 行附近):

我不知道什么能帮助你回答这个问题,所以当我运行以下命令时,我会发布我收到的所有文件(可能与问题相关): $ rails generate scaffold Pins

迁移文件:

class CreatePins < ActiveRecord::Migration
  def change
    create_table :pins do |t|
      t.string :description

      t.timestamps
    end
  end
end

该模型:

class Pin < ActiveRecord::Base
  attr_accessible :description
end

_form.html.erb:(这是它发现错误的地方)

<%= simple_form_for(@pin) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :description %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

new.html.erb:(这是“模板结论的痕迹”)

<h1>New pin</h1>

<%= render 'form' %>

<%= link_to 'Back', pins_path %>

我不明白这个错误,因为我认为该方法是在 attr_accessible 下的模型中定义的:description

如果您能理解我刚才所说的任何内容,我将不胜感激。如果不是感谢您花时间查看它。

4

3 回答 3

1

您需要运行迁移来创建pins表。

 rake db:migrate

如果它抱怨表存在,这意味着您在添加列之前运行了迁移。description如果不先恢复迁移,则重新运行迁移将不起作用:

 rake db:migrate:redo

为了澄清你的观点attr_accessible :description-attr_accessible没有为的模型定义属性。您的数据库表会这样做(通常根据您的迁移)。什么attr_accessible是作为可批量分配属性的白名单。

于 2013-07-01T16:11:17.360 回答
0

我假设您rake db:migrate在创建脚手架后没有这样做。先试试那个。

我不明白这个错误,因为我认为该方法是在 attr_accessible 下的模型中定义的:description

声明实际上并attr_accessible :description没有定义方法。ActiveRecord 根据表中的列在后台为您执行此操作pins。如果您没有运行迁移(因此创建表)ActiveRecord 将无法在您的模型上自动生成属性方法,这很可能会导致您看到的错误。

attr_accessible声明可通过批量分配设置的属性。通常,当您在控制器中执行此操作时:模型属性的哈希值@pin = Pin.new params[:pin]在哪里。params[:pin]

于 2013-07-01T16:15:00.097 回答
0

你能检查你的数据库表“ pins”有description列吗?如果没有,请尝试删除以前的表并尝试使用description列创建新表。

或者您可以创建一个迁移文件来更新您现有的表,例如:

rails g migration add_description_to_pins

然后在这个文件中:

class AddDescriptionToPins < ActiveRecord::Migration
  def self.up
    add_column :pins, :description, :string
  end

  def self.down
    remove_column :pins, :description
  end
end
于 2013-07-01T16:45:05.427 回答