0

私はこのform_forを持っています私のusers#showテンプレートで2人のユーザー間でプライベートメッセージを送信します

<%= form_for([current_user, @message])  do |f| %>
    <%= f.hidden_field :to_id, :value => @user.id %>
    <div class="message_field">
        <%= f.text_area :content, placeholder: "Send a private message..." %>
    </div>
   <%= f.submit "Post", class: "btn btn-large btn-primary" %>
   <span class="message_countdown"></span>
<% end %>

そして私のメッセージモデルでは、私は持っています

belongs_to  :to,
    :class_name => 'User',
    :foreign_key => :to_id

validates :content, presence: true, length: { maximum: 1000 }
validates :user_id, :to_id, presence: true

奇妙なのは、ユーザーが初めて作成され、ショーのプロフィールに移動したときです。

彼らはすでにこのエラーを受け取ります

The form contains 2 errors.
* Content can't be blank
* To can't be blank

ページを更新すると、それらは消えます。フォームは正常に機能します。何が悪いのかわからないようです。フォームはすでにそれ自体で自動送信を試みていますか?

私のメッセージに#createアクションがあります

def create
    @message = current_user.messages.build
    @message.to_id = params[:message][:to_id]
    @message.user_id = current_user.id
    @message.content = params[:message][:content]
    if @message.save
        flash[:success ] = "Private Message Sent"
    end
        redirect_to user_path(params[:message][:to_id])
end

それが光を当てるなら。:user_id attr_accessibleを作成したくなかったので、@msessage属性を手動で割り当てます。

それでも、最初にページにアクセスしただけで検証がすでに失敗しているのはなぜですか?私は提出していません。ページを離れてページに戻ると、エラーは発生しなくなります。

これが私のusers#showアクションです

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    @current_user = current_user
    if user_signed_in?
        @message = current_user.messages.build(params[:messages], to_id: @user.id)
    end
    @influence = current_user.points
    @badge_items = current_user.badges.to_a.map(&:name)
  end

それは私のショーアクションと何か関係がありますか?具体的には

@message = current_user.messages.build(params[:messages], to_id: @user.id)

それは作成を呼び出すことですか?

助けていただければ幸いです。ありがとう!

アップデート。それを私が直した!

それ以外の...

@message = current_user.messages.build(params [:messages]、to_id:@ user.id)

今やりました

@message = current_user.messages.build

問題はもっと多かったと思います...メッセージの値とユーザーIDを探していましたが、まだ渡されていません。ありがとう!

4

1 に答える 1

0

はい、

@message = current_user.messages.build(params[:messages], to_id: @user.id)

オブジェクトを作成しようとしていMessageます。

これは、新しいレコードを作成するhas_many方法の詳細を説明するRailsガイドへのリンクです。messages.build

http://guides.rubyonrails.org/association_basics.html#has_many-association-reference

于 2012-05-06T04:12:39.890 に答える