我遇到这个奇怪的问题,其中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;那样多的文档。
答案 0 :(得分:0)
我猜这是一个群体分配问题。
你需要传递允许的参数。
请检查此链接。
http://blog.trackets.com/2013/08/17/strong-parameters-by-example.html