0

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

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

  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
4

2 回答 2

1

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

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

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

nil:NilClass 的未定义方法“form=”

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

于 2012-09-10T08:28:13.573 回答
1

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

我认为您应该更改profile@profilecreate 方法内部。只是在阅读有关实例变量的 ruby​​ 指南后猜测,我的想法是声明将在控制器结构中动态添加的实例变量,然后将它们传递给模型。它总是@...在由rails g scaffold.

试一试吧:)

于 2012-09-12T17:42:16.810 回答