Rails mailboxer gem не может отправить сообщение
Я использую Gem Mailboxer для функции обмена сообщениями, но так как я новичок, я не очень уверен, как его использовать. В основном я создал следующий контроллер сообщений:
class MessagesController < ApplicationController
before_action :set_message, only: [:new, :create]
def new
@message = Message.new
end
def create
current_user.send_message(@recipient, message_params(:body, :subject))
redirect_to conversations_path
end
private
def set_message
@recipient = User.find(params[:recipient_id])
end
def message_params
params.require(:message).permit(:body, :subject)
end
end
Тогда мой взгляд:
<h1>New Message</h1>
<%= simple_form_for(@message, html: {class: "form-horizontal"}) do |f| %>
<%= f.error_notification %>
<%= f.input :subject %>
<%= f.input :body, as: :text, input_html: { rows: "3"} %>
<div class="form-actions">
<%= f.button :submit, class: "btn btn-primary" %>
</div>
<% end %>
Но я не могу отправить сообщение... (Кстати, я могу отправить сообщение с консоли, а также заменить часть контроллера сообщений на "current_user.send_message(@recipient, "test", "test")", но определенно нет что я хочу)
1 ответ
Решение
Используйте form_tag вместо form_for
Вместо использования form_for попробуйте использовать form_tag, так как это работает для меня:
<%= form_tag("/messages/send_message", method: "post", url: send_message_path) do %>
<%= hidden_field_tag :user_id, "#{@user.id}" %>
<%= text_field_tag :subject, nil, :class => 'form-control', :placeholder => "Subject" %>
<%= text_area_tag :message, nil, :class => 'form-control', :placeholder => "Message" %>
<%= submit_tag "Submit", :class => "btn btn-primary" %>
<% end %>
Это будет иметь действие, которое вы выполняете контроллером сообщений:
def send_message
@user = User.find(params[:user_id])
@message = params[:message]
@subject = params[:subject]
current_user.send_message(@user, "#{@message}", "#{@subject}")
redirect_to root_path
end
И что-то вроде этого в вашем файле маршрутов:
post '/messages/send_message', :to => "messages#send_message", :as => "send_message"
Очень надеюсь, что это поможет!