私はユーザー間に一方向の関係モデルを持っています(ユーザーには多くの関係があります)。これは、ユーザーaのユーザーbのニックネームとともに2人の特定のユーザーのIDを保持します。フォームを使用して、ユーザーが別のユーザーの電子メールアドレスとニックネームを渡せるようにしたい。その電子メールを持つユーザーが存在する場合は、ユーザー間の関係を作成します。一致するユーザーがいない場合は、その電子メールで新しい「ファントム」ユーザーを作成してから、関係を構築します。
私はレールに比較的慣れていないので、最初に基本を使用して素朴に試しました。
= 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"
しかし、それは「間違った数の引数(1対2)」というエラーをスローします
リレーションシップモデルにメールフィールドを追加することもできますが、目的のユーザーを検索するために使用する場合を除いて、メールフィールドは必要ありません。私の計画は、リレーションシップコントローラーの作成アクションに渡された電子メールとニックネームの値を使用して、リレーションシップを作成するか、新しいユーザーを作成してから、ケースに応じてリレーションシップを作成することでした。では、どうすれば任意の値をコントローラーアクションに渡すことができますか?