保存关联模型然后从中检索一些数据时出现问题

时间:2011-03-19 19:30:09

标签: ruby-on-rails ruby ruby-on-rails-3 model associations

我正在使用Ruby on Rails 3,我试图从刚刚保存的子模型(关联模型)中检索一些数据,以便将这些数据存储在父模型中。

更准确地说(步骤)我想做:

  1. 保存父模型用户的子模型帐户
  2. 检索刚刚创建的帐户ID值,并将该值保存在名为users_account_id的用户模型属性中。
  3. ...更明确地(在值中)我希望在保存子模型帐户后有以下方案:

    # 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
    

2 个答案:

答案 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_idaccounts表格会有任意类型的user_id。

这仍然允许您在两个方向上使用关联:

some_user.account # Returns the correct account object
some_account.users # Returns all users for the account

我希望这有点帮助!