Rails 4:has_one - belongs_to:嵌套模型实例属性不会分配

时间:2015-01-13 05:36:05

标签: ruby-on-rails ruby belongs-to has-one

我遇到这个奇怪的问题,其中instance [:attribute]适用于赋值和写入属性但是instance.attribute,instance.update等,都无法更改模型实例中属性的值。

以下是用户模型:

class User < ActiveRecord::Base
  has_one :api_account, inverse_of: :user, dependent: :destroy

# Other user-specific validations come after

以下是相关的api_account:

class ApiAccount < ACtiveRecord::Base
  belongs_to :user, inverse_of: :api_account
  validates :access_token, presence: true
  validates :user, presence: true,
                   uniqueness: true

在api_account控制器中,我有:

response = ### Some JSON response from a distant server

@api_account = @user.create_api_account(:access_token => response[:access_token])
# -> This doesn't work and does not set the access_token attribute in the database.
# id: 2, access_token: nil, user_id: nil, created...

然后我将其更改为@api_account = @user.build_api_account(:access_token => response[:access_token])然后user_id: 1,但access_token: nil

在rails控制台中:@a = @u.build_api_account正常工作,@a[:access_token] = "access_token"正常工作并保存更改后的持久性。但是我尝试的其他一切都失败了。

注意:@a.access_token = "access_token",仅更改@a.access_token的属性;但对@a的检查仍然显示&#34; access_token属性为nil

api_account的架构如下所示:

create_table "api_accounts", force: true do |t|
  t.text     "access_token"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "user_id"
end

add_index "api_account", ["user_id"], name: "index_api_accounts_on_user_id"

有人知道这里出了什么问题吗?用户实例工作正常 - 正常的属性操作很有效。我完全迷失了。 &#34; has_one&#34;有一些不同的东西。并没有像#34; has_many&#34;那样多的文档。

1 个答案:

答案 0 :(得分:0)

我猜这是一个群体分配问题。

你需要传递允许的参数。

请检查此链接。

http://blog.trackets.com/2013/08/17/strong-parameters-by-example.html