我有phone
的自定义字段User
未存储在数据库中,因为我将其用于其他目的。每个字段都有不同的部分,可以通过AJAX自行更新。这就是我在UsersController中处理它的方法:
应用程序/控制器/ users_controller.rb
def update
@user = ...
if @user.update_attributes(params[:user])
respond_to do |format|
format.json { render json: {html: render_to_string partial: 'edit_field', locals: { user: @user }} }
end
end
end
我在自定义用户模型属性phone
中提供了custom_attrs
参数:
应用程序/模型/ user.rb
include UserConcern
...
attr_accessor :custom_attrs
...
# I've shorten this method, so that you can get the idea, might not work in reality
def update_attributes
self.custom_attrs[:phone] = self.phone
end
在我在控制器中返回响应之前,我无法将其添加到@user
对象,我得到ActiveModel::MissingAttributeError: can't write unknown attribute 'phone'
。
在我看来,phone
字段值是由UserConcern中的方法设置的:
应用程序/模型/关切/ user_concern.rb
def phone
self.phone = fetch_phone(user) # this method returns the users' phone value
end
当我更新手机并重新呈现部分时,它仍然具有相同的值,因为@user
对象没有phone
,因为它不是模型中的字段。
我也不能send("phone=", value)
,因为控制器中没有这样的方法(导致NoMethodError: undefined method 'phone_number_mobile=' for #<UsersController:
)
那么 - 如何通过phone
或UserConcern将@user
的值设置为新更新的对象@user.custom_attrs
?
答案 0 :(得分:0)
有一种更简单的方法。
应用程序/模型/ user.rb
...
attr_accessor :phone
...
然后,您可以访问user.phone