我正在使用Ruby on Rails 3,我试图从刚刚保存的子模型(关联模型)中检索一些数据,以便将这些数据存储在父模型中。
更准确地说(步骤)我想做:
users_account_id
的用户模型属性中。...更明确地(在值中)我希望在保存子模型帐户后有以下方案:
# Account values
Account.id = 222
Account.name = "Test_name"
...
Account.user_id = 111
# User values
User.id = 111
User.users_account_id = 222
我已经实施了第一步,但如何实施第二步?
为了检索帐户ID,我尝试使用关联回调
class User < ActiveRecord::Base
has_one :account, :before_add => :callback_name
validates_associated :account
accepts_nested_attributes_for :account
def callback_name
self.users_account_id = Account.find_by_id(self.id).id
end
end
但是我收到了这个错误:
Unknown key(s): before_add
答案 0 :(得分:1)
这样做太过分了。您需要做的就是将user_id置于将被创建为隐藏字段的帐户的形式中。
<% form_for(@account) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<% end %>
当然,添加您想要帐户的其他字段,并且您需要一个current_user对象,无论如何您都需要使用当前逻辑。
答案 1 :(得分:1)
我会稍微提一下你的问题,并问为什么你需要指向两个方向的ID?我假设您希望您的用户与帐户相关联,并且您希望帐户拥有一个或多个用户。执行此操作的“Rails方式”将类似于以下内容:
class User < ActiveRecord::Base
belongs_to :account
end
class Account < ActiveRecord::Base
has_many :users
end
在您的数据库中,users
表格会有account_id
,accounts
表格不会有任意类型的user_id。
这仍然允许您在两个方向上使用关联:
some_user.account # Returns the correct account object
some_account.users # Returns all users for the account
我希望这有点帮助!