0

Rails アプリに素晴らしい Mailboxer gem を実装しようとしています。ユーザー プロファイル ページに、フォームをロードしてそのユーザーにプライベート メッセージを送信するボタンを含めたいと考えています。この質問に投稿されたコードを運のないガイドとして使用しようとしました: Rails mailboxer gem, send message to user using form

ユーザー ページのボタンをクリックすると、プライベート メッセージ フォームが読み込まれます。ただし、そのフォームの [送信] ボタンをクリックすると、次のエラーが表示されます。

ActiveRecord::RecordNotFound in MessagesController#create Couldn't find User without an ID

関連するコードは次のとおりです。コードサンプルの下に私の考えを投稿します。

メッセージコントローラー

class MessagesController < ApplicationController
  def index
  end

# GET /message/new
  def new
  @user = User.find(params[:user])
  @message = current_user.messages.new
    # display form
  end

  # POST /message/create
  def create
    @user = User.find(params[:user])
    @message = current_user.connections.build(params[:message])
    #current_user.send_message(@user, params[:body], params[:subject])
  end
end

new.html.erb (メッセージ ビュー - 新規)

<%= form_for(@message) do |f| %>
            <div>Subject
            <%= f.text_field :subject %></div>
            <div>Message
            <%= f.text_area :body%></div>
             <%= f.hidden_field(:user, :value => @user.id) %>
            <p><%= f.submit 'Send message'%></p>
        <% end %>

Mailboxer のドキュメント current_user.send_message(@user, params[:body], params[:subject])では、create 関数で (私はコメントアウトしました) を使用することを推奨していますが、「new」関数で GET を使用して取得したユーザーを引き継ぐことができません。新しい関数を使用して作成関数に送信しようとしていますが、完全に行き詰まっています。現在の作成関数が新しい関数からユーザー ID を見つけられないのはなぜですか?

参考までに、gem ドキュメントへのリンクを次に示します: https://github.com/ging/mailboxer

ありがとう!

編集: ユーザー プロファイル ページのボタン コード

<%= button_to "Send a message", new_message_path(:user => @user) %>

関連ルート

resources :messages do
    member do
      post :reply
      post :trash
      post :untrash
      post :new
    end
4

1 に答える 1

1

new_message_path(@user.id)メール ボタンをユーザーのプロフィール ページにリンクする必要があります。

適切にインデックスを作成@userする変数がないため、DB から /message/new が設定されていないように見える可能性があります。params[:user]

ルートは次のようになります。

resources :messages do
  collection do
    post 'new/:user', 'messages#create', as 'new_message_for_user'
  end
  member do
    ..
  end
end

ボタンは次のようになります。

= button_to 'Send a message', new_message_for_user(@user), method: :post

私の好みの一部が反映されていると確信していますが、スキップしているように感じる Rails-Way がいくつかあります。また、User オブジェクトをオーバーライドした場合は、ボタンを変更する必要がある場合があります。

于 2013-12-09T01:38:41.687 に答える