Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails Mailboxer-从按钮创建对话_Ruby On Rails_Mailboxer - Fatal编程技术网

Ruby on rails Rails Mailboxer-从按钮创建对话

Ruby on rails Rails Mailboxer-从按钮创建对话,ruby-on-rails,mailboxer,Ruby On Rails,Mailboxer,我正在使用mailboxer gem在应用程序上实现用户消息传递。目前,我已经基于此设置了它。用户可以在表单中输入电子邮件地址、主题和消息,然后开始对话 我希望用户能够在不必输入其他用户电子邮件地址的情况下开始对话-例如,单击相关页面上的按钮,我可以将@user作为收件人传递给用户 这是我当前的控制器: class ConversationsController < ApplicationController authorize_resource helper_me

我正在使用mailboxer gem在应用程序上实现用户消息传递。目前,我已经基于此设置了它。用户可以在表单中输入电子邮件地址、主题和消息,然后开始对话

我希望用户能够在不必输入其他用户电子邮件地址的情况下开始对话-例如,单击相关页面上的按钮,我可以将@user作为收件人传递给用户

这是我当前的控制器:

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"