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メソッド#create =

  def create
    profile = Profile.new
    profile.form = "signup"

    super
  end
4

2 に答える 2

1

面白い。あなたがやりたいのは、オブジェクトの仮想属性「フォーム」に特定の値を持たせることだと思います。つまり、フォームはデータベースにも存在します。そうでない場合は、attr_accessor :form ドキュメントを使用する必要があります

これは、呼び出されるクラスのフォームのgetterメソッドとsetterメソッドを定義します。

しかし、あなたが述べたエラーは根本的に異なるものです。

nil:NilClassの未定義のメソッド `form ='

これは単に、paramsで渡されたIDを持つプロファイルが存在しないことを意味します。つまり、params id = 222を更新している場合、ID222のデータベースレコードはプロファイルに存在しません。

于 2012-09-10T08:28:13.573 に答える
1

私はあなたの問題が正確に何であるかわかりません。問題の説明を2回読んだ後で理解できるのは、プロファイルのインスタンスを「新規」にして、そのフォーム属性を割り当てようとしたことです。そして、そのインスタンスメソッドsignup?を使用して検証を行います。ただし、を参照しているself.form ため、後でエラーが発生します。selfnil Class

createメソッドの内部に変更profileする必要があると思います。インスタンス変数に関するルビーガイド@profileを読んだ後の推測では、コントローラー構造内に動的に追加され、後でモデルに渡されるインスタンス変数を宣言することを考えています。そして、それは常にによって生成されたコントローラーの内部にあります。@...rails g scaffold

試してみてください:)

于 2012-09-12T17:42:16.810 に答える