14

私はユーザー間に一方向の関係モデルを持っています(ユーザーには多くの関係があります)。これは、ユーザー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)」というエラーをスローします

リレーションシップモデルにメールフィールドを追加することもできますが、目的のユーザーを検索するために使用する場合を除いて、メールフィールドは必要ありません。私の計画は、リレーションシップコントローラーの作成アクションに渡された電子メールとニックネームの値を使用して、リレーションシップを作成するか、新しいユーザーを作成してから、ケースに応じてリレーションシップを作成することでした。では、どうすれば任意の値をコントローラーアクションに渡すことができますか?

4

1 に答える 1

16

最初のフォームを使用してattr_accessor、モデル内で email 属性を作成します。

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

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

  attr_accessor :email
于 2012-07-14T22:14:57.927 に答える