请原谅我可能天真,这是我第一次使用StackOverflow并且我正在尝试学习ruby。我正在通过onemonthrails.com的教程制作一个类似于pinterest的教程。我正在尝试添加一个引脚,我不断收到错误:
Pins#new
中的NoMethodError显示/Users/jake/code/omrails/app/views/pins/_form.html.erb第5行提出:
未定义的方法`描述'为# 提取的来源(第5行):
我不知道什么都会帮助你回答这个问题所以当我运行以下命令时,我会发布我收到的所有文件(可能与问题相关): $ rails生成脚手架针脚
迁移文件:
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
如果你能理解我刚才所说的话,我将非常感谢你的帮助。如果不是因为花时间去看它。
答案 0 :(得分:1)
您需要运行迁移才能创建pins
表。
rake db:migrate
如果它抱怨该表存在,则表示您在添加description
列之前运行了迁移。如果没有首先恢复迁移,重新运行迁移将无法运行:
rake db:migrate:redo
澄清您关于attr_accessible :description
- attr_accessible
的观点,不定义模型的属性。您的数据库表就是这样(通常根据您的迁移)。 attr_accessible
所做的是充当群组可分配属性的白名单。
答案 1 :(得分:0)
我假设您在创建脚手架后没有rake db:migrate
。先尝试一下。
我不明白错误,因为我认为该方法已定义 在attr_accessible下的模型中:description
attr_accessible :description
声明实际上并未定义该方法。 ActiveRecord会根据您pins
表中的列为您做这件事。如果您没有运行迁移(因此创建表),ActiveRecord将无法在您的模型上自动生成属性方法,这很可能导致您看到的错误。
attr_accessible
声明您的属性可通过质量分配进行设置。通常,当您在控制器中执行此操作时:@pin = Pin.new params[:pin]
其中params[:pin]
是模型属性的哈希值。
答案 2 :(得分: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