rails将变量传递给控制器​​不工作的模型

时间:2012-09-10 08:00:48

标签: ruby-on-rails ruby-on-rails-3 activerecord model var

我试图将变量从控制器传递到我的表单无效。

它在另一个控制器中工作,但无法使其适用于新用户注册。

  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

2 个答案:

答案 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

试一试:)