2012-07-14 8 views
8

私は、ユーザbのニックネームとともに、与えられた2人のユーザのidを保持するユーザ間の単方向関係モデルを持っています。私はフォームを使用して、ユーザーが別のユーザーの電子メールアドレスとニックネームを渡すことを許可します。その電子メールを持つユーザーが存在する場合は、ユーザー間の関係を作成します。一致するユーザーがいない場合は、その電子メールで新しい「ファントム」ユーザーを作成し、その関係を構築します。私は比較的レールに新しい、そして最初だ任意の(非モデル属性の)値をrailsアクションに渡す方法は?

は単純に基本的に使用してみました:

= form_for @relationship do |f| 
    = f.label :email 
    = f.text_field :email 
    = f.label :nickname, "Nickname" 
    = f.text_field :nickname 
    = f.submit "Submit", class: "btn btn-large btn-primary" 

関係モデルは、電子メール属性が含まれていないため、これが失敗しました。私はそれから、関係モデルを直接参照していなかったので、それがうまくいくかもしれないと思って、次のことを試しました。

= form_tag :controller => "relationships", :action => "create" do 
    = label :email   
    = text_field :email 
    = label :nickname, "Nickname" 
    = text_field :nickname 
    = submit "Submit", class: "btn btn-large btn-primary" 

しかし、それは私が関係モデルに電子メールフィールドを追加することもできますが、それは私がそれを使用しますときは別に必要ないですエラー「引数の数が間違って(2 1)」

をスローします目的のユーザーを検索します。私の計画は、リレーションシップコントローラーの作成アクションに渡された電子メールとニックネームの値を使用して、リレーションシップを作成するか、新しいユーザーを作成し、次にケースに応じてリレーションシップを作成することでした。だから、どのようにしてコントローラアクションに任意の値を渡すことができますか?

答えて

11

最初のフォームを使用して、モデル内のattr_accessorをemail属性にしてください。

これは基本的に、フォームのようなものから派生できる一時変数を作成しますが、データベースには保存されません。

class Relationship < ActiveRecord::Base # <- Assuming that's the name of your Relationship model 

    attr_accessor :email 
+3

強力なパラメータを持つRails 4はどうなりますか? – Micah

+3

@Micah http://stackoverflow.com/a/15920542を参照してください。許可されたparamsリストに追加するだけです。 – Anthony

関連する問題