Ruby on rails Rails 4升级-属性访问器
我正在将我的应用程序从rails 3.2升级到rails 4.2.5 在我的一个模型中,我有一个attr_访问器:user_id,我定义了一个getter和setter方法,因为我需要在条件basic上赋值Ruby on rails Rails 4升级-属性访问器,ruby-on-rails,ruby-on-rails-4,attr-accessor,Ruby On Rails,Ruby On Rails 4,Attr Accessor,我正在将我的应用程序从rails 3.2升级到rails 4.2.5 在我的一个模型中,我有一个attr_访问器:user_id,我定义了一个getter和setter方法,因为我需要在条件basic上赋值 class DummyModel < ActiveRecord::Base attr_accessor :user_id belongs_to :current_user before_save :set_user_id
class DummyModel < ActiveRecord::Base
attr_accessor :user_id
belongs_to :current_user
before_save :set_user_id
def user_id
self[:user_id] ? self[:user_id] : current_user_id ? current_user.id : nil
end
def user_id=(value)
self[:user_id] = value ? value : current_user_id ? current_user.id : nil
end
private
def set_user_id
self.current_user_id = CurrentUser.first_or_create(:user_id => self[:user_id]).id
end
end
因此,我有一个解决方案可以将user\u id重命名为其他名称,但是user\u id在我的应用程序的许多地方都被使用,这是不可能更改的
希望这能解释我的问题。提前感谢您的帮助。如果您喜欢attr\u accessible,您也可以在Rails 4中使用它。您应该像gem一样安装它:
gem 'protected_attributes'
从上面我可以理解,但是在rails 4中现在有强大的参数。attr_访问器仍然可以在rails 4中初始化,这仍然会为您提供虚拟属性,但从上面看,user_id似乎是模型级别的物理属性。让我知道这是否有意义 我想你对和感到困惑 关于它们之间区别的链接:
在rails 4中,您仍然可以使用
attr\u accessor
,但是如果您的意思是attr\u accessor
,那么这里有一些信息:我不确定您为什么要这样做,但是如果要替换attr\u accessor生成的方法,那么使用attr\u accessor是没有意义的。例如,您也可以直接使用实例变量
def user_id
@user_id || current_user_id
end
def user_id=(value)
@user_id = value || current_user_id
end
谢谢你的回复。我也尝试过使用受保护的属性。我的问题是使用self[:user\u id]而不是self.user\u id。我不能使用self.user\u id,因为它会引发堆栈级的深度错误。你能告诉我错误并在该范围内尝试过,还有什么模型名称会有用。你能用所有
attr\u accessible
,attr\u accessor
,显示你的完整模型吗,关联和getter/setter定义?我认为@FrederickCheung下面的答案是正确的。
def user_id
@user_id || current_user_id
end
def user_id=(value)
@user_id = value || current_user_id
end