メッセージが送信者と受信者の 2 人のユーザーに属するメッセージ モデルを作成しようとしています。同様に、ユーザーは、Sent_Messages および Received_Messages として、多くのメッセージを持ちます。
新しいメールを作成しようとすると問題が発生します。フォームは正常に表示されますが、保存しようとすると、さまざまなエラーが発生します (最近試したソリューションでの試行に応じて、現在「ユーザーが予期した、文字列を取得しました」)。
私のモデルと関連するコントローラーの定義は次のとおりです。
ユーザー.rb
class User < ActiveRecord::Base
has_many :sent_messages, :class_name => "Message", :foreign_key => 'sender_id'
has_many :received_messages, :class_name => "Message", :foreign_key => 'recipient_id'
...
end
メッセージ.rb
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => 'User'
belongs_to :recipient, :class_name => 'User'
...
end
Message_Controller.rb before_filter :get_user
...
def new
@message = @user.sent_messages.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @message }
end
end
def create
@message = Message.new(params[:message])
respond_to do |format|
if @message.save
format.html { redirect_to @message, notice: 'Message was successfully created.' }
format.json { render json: @message, status: :created, location: @message }
else
format.html { render action: "new" }
format.json { render json: @message.errors, status: :unprocessable_entity }
end
end
end
...
private
def get_user
@user = User.find(params[:user_id])
end
これを試す方法に根本的な問題があることは認識していますが、私はレールにかなり慣れていないため、関連するすべての質問 ( thisやthisなど) には、役立つ答えがないようです。
編集:
_形:
<%= form_for([@user, @message]) do |f| %>
...
<div class="field">
<%= f.label :recipient %><br />
<%= f.text_field :recipient %>
</div>
<div class="field">
<%= f.label :subject %><br />
<%= f.text_field :subject %>
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>