我的应用中有两个对象:user
,其中包含唯一参数email_address
和node
,其名称属于用户。
这是我在DB中的两个对象,节点:
class CreateNodes < ActiveRecord::Migration
def change
create_table :nodes do |t|
t.string :name
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
end
用户:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email_address, unique: true, index: true
t.timestamps null: false
end
end
end
我添加节点的表单如下所示:
<%= form_for @node do |f| %>
<%= f.text_field :name, :class => "form-control" %>
<%= f.number_field :user_id, :class => "form-control" %>
<%= f.submit 'Add the node' %>
<% end %>
但是,为了方便起见,我想使用用户的email_address
参数而不是他/她的id。我已经在我的控制器中进行了更改以找到链接到电子邮件地址的ID但我的新表单返回错误,这里是:
<%= form_for @node do |f| %>
<%= f.text_field :name, :class => "form-control" %>
<%= f.email_field :user_email_address, :class => "form-control" %>
<%= f.submit 'Add the node' %>
<% end %>
错误:
undefined method `user_email_address' for #<Node id: nil, name: nil, user_id: nil>
返回的问题很明显,但我不知道如何添加此方法,仍然遵循RoR开发的最佳实践,有什么建议吗?
答案 0 :(得分:3)
如果您有以下行:
<%= f.email_field :user_email_address, :class => "form-control" %>
f
对象,它是一个Node
对象,它自己调用方法user_email_address
。由于没有这样的方法,您将收到错误。
在Node
模型中添加方法:
def user_email_address
self.user.email_address
end
添加上述方法后,以下方法将起作用:
<%= f.email_field :user_email_address, :class => "form-control" %>