【问题标题】:rails pass variable to model from controller not workingrails将变量从控制器传递给模型不起作用
【发布时间】:2012-09-10 08:00:47
【问题描述】:

我试图将一个变量从控制器传递到我的表单,但无济于事。

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

  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" 也不起作用,我的属性可访问列表中有 :form

部分模型:

  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

【问题讨论】:

  • 你也应该在这里发布模型中的相关代码
  • @LukasStejskal 更新了问题,提供了有关模型的更多信息
  • 能否提供视图代码?
  • @user1022209 贴出创建方法

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


【解决方案1】:

我不确定您的问题到底是什么。 在我两次阅读您的问题陈述后,我了解到您试图“新建”一个 Profile 实例,分配其 form 属性。并使用其实例方法signup? 进行验证。但是在self.form 之后出现错误,因为self 引用了nil Class

我认为您应该在 create 方法中将profile 更改为@profile。 阅读ruby guide about instance variable后猜测, 我的想法是声明将在控制器结构中动态添加的实例变量,然后将它们传递给模型。并且在rails g scaffold生成的控制器内部总是@...

试试看吧:)

【讨论】:

  • def 创建 { @profile = Profile.new; @profile.form =="signup" } 然后在模型注册中?如果@profile.form == "signup" 返回 true,我会执行此方法,并且这会因未定义的方法 `form' for nil:NilClass 而失败:NilClass arghh 这真的很令人沮丧
  • 尝试在你的方法中使用 self.form =="signup"
【解决方案2】:

有趣。我相信您想要做的是使对象的虚拟属性“形式”具有一定的值。 IE。数据库中也存在表单。如果不是,您应该使用attr_accessor :form Documentation

这定义了表单在其被调用的类中的 getter 和 setter 方法。

但是,您所说的错误是完全不同的。

nil:NilClass 的未定义方法 `form='

这仅仅意味着在参数中传递 id 的配置文件不存在。即,如果我们更新参数 id = 222,则 Profile 中不存在 id 为 222 的数据库记录。

【讨论】:

  • 在profilescontroller#update中它可以工作,在那里我设置了@profile.form = "signup" 但是在用户注册时只有创建操作可以设置,所以我仍然对此一无所知
  • 请分享您的创建方法。如果我之前不清楚,我深表歉意,但是我想说的是您尝试执行的变量 .form = 不是对 Profile 对象的引用。是nil
  • :我已经发布了create方法希望能把事情搞清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多