Ruby on rails Rails Mailboxer-从按钮创建对话
我正在使用mailboxer gem在应用程序上实现用户消息传递。目前,我已经基于此设置了它。用户可以在表单中输入电子邮件地址、主题和消息,然后开始对话 我希望用户能够在不必输入其他用户电子邮件地址的情况下开始对话-例如,单击相关页面上的按钮,我可以将@user作为收件人传递给用户 这是我当前的控制器:Ruby on rails Rails Mailboxer-从按钮创建对话,ruby-on-rails,mailboxer,Ruby On Rails,Mailboxer,我正在使用mailboxer gem在应用程序上实现用户消息传递。目前,我已经基于此设置了它。用户可以在表单中输入电子邮件地址、主题和消息,然后开始对话 我希望用户能够在不必输入其他用户电子邮件地址的情况下开始对话-例如,单击相关页面上的按钮,我可以将@user作为收件人传递给用户 这是我当前的控制器: class ConversationsController < ApplicationController authorize_resource helper_me
class ConversationsController < ApplicationController
authorize_resource
helper_method :mailbox, :conversation
def create
recipient_emails = conversation_params(:recipients).split(',')
recipients = User.where(email: recipient_emails).all
conversation = current_user.
send_message(recipients, *conversation_params(:body, :subject)).conversation
redirect_to conversation
end
def reply
current_user.reply_to_conversation(conversation, *message_params(:body, :subject))
redirect_to conversation
end
def trash
conversation.move_to_trash(current_user)
redirect_to :conversations
end
def untrash
conversation.untrash(current_user)
redirect_to :conversations
end
private
def mailbox
@mailbox ||= current_user.mailbox
end
def conversation
@conversation ||= mailbox.conversations.find(params[:id])
end
def conversation_params(*keys)
fetch_params(:conversation, *keys)
end
def message_params(*keys)
fetch_params(:message, *keys)
end
def fetch_params(key, *subkeys)
params[key].instance_eval do
case subkeys.size
when 0 then self
when 1 then self[subkeys.first]
else subkeys.map{|k| self[k] }
end
end
end
end
如果我在表单上点击submit之前在Firefox上“查看源代码”,我可以看到其中有一个字段,正确地传递了用户的电子邮件地址,但由于某种原因它不会发送到控制器
这可能会有所帮助——如果我将隐藏的字段标记改回普通字段,并如上所述传入电子邮件地址,视图甚至不会加载。它在说
'的未定义方法'merge'user@user.com“:字符串
并在代码中突出显示该行
谢谢在mailboxer中,您不会将消息发送到电子邮件地址,而是将其发送到带有
作为可发送消息的模式,例如用户。下面的代码是我如何完成这项工作的一个粗略实现,在控制器中设置了@user
变量,正如在配置文件页面上一样
<%= 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_by_email(params[:user_email])
@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"
真希望这有帮助 谢谢,非常有帮助。我马上就到了,并且在上面添加了另一个最终查询!努力让最后一部分工作。实际上,我应该更仔细地看,回答这里:。我会把你上面的答案标记为正确的,因为它让我走上了正确的道路,我相信我将来会帮助别人。谢谢
def create
recipient_emails = conversation_params(:recipients).split(',')
recipients = User.where(email: recipient_emails).all
conversation = current_user.
<%= 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
def send_message
@user = User.find_by_email(params[:user_email])
@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"