我试图将变量从控制器传递到我的表单无效。
它在另一个控制器中工作,但无法使其适用于新用户注册。
def update
@profile = Profile.find(params[:id])
@profile.form = "signup"
...
end
在模型内部我可以@profile.form
来获取值
这不适用于新用户注册: 内部创造行动:
undefined method `form=' for nil:NilClass
如何在新用户注册时将变量传递给我的模型? User = User.new
然后@user.form == "signup"
也不起作用,我有:我的属性可访问列表中的表单
模特的一部分:
attr_accessible form
...
validates :city_id, :presence => true, :if => :signup?
def signup?
#@profile.form == "signup"
#@user.form == "signup"
if self.form == "signup"
return true
else
return false
end
end
编辑1: 仍然无法将模型传递给模型:S:S:S尝试了所有可能的方式,谷歌找到了解决方案。
我的注册创建方法#create =
def create
profile = Profile.new
profile.form = "signup"
super
end
答案 0 :(得分:1)
有趣。我相信你想要做的是将对象的虚拟属性“形式”赋予某个值。即数据库中是否存在表单。如果不是,您应该使用attr_accessor :form
Documentation
这为在调用它的类中定义表单的getter和setter方法。
但是,您所说的错误是根本不同的。
未定义的方法`form ='为nil:NilClass
这仅仅意味着在params中传递id的配置文件不存在。即如果我们正在更新params id = 222,则Profile不存在id为222的数据库记录。
答案 1 :(得分:1)
我不确定你的问题到底是什么。
在我两次阅读您的问题陈述后,我理解的是您尝试“新建”一个Profile实例,并分配其表单属性。并使用其实例方法signup?
进行验证。但是您在self.form
之后收到错误,因为self
引用nil Class
我认为您应该在create方法中将profile
更改为@profile
。
只需在阅读ruby guide about instance variable后猜测,
我的想法是声明将在控制器结构中动态添加的实例变量,然后将它们传递给模型。 @...
生成的控制器内部总是rails g scaffold
。
试一试:)