0

使用 Mailboxer 创建内部消息系统,用户可以从基本配置文件列表中向另一个用户发送消息(对于那些创建它们的用户)。

显示basic_profiles(专家)列表的索引正在显示,但创建新消息的链接未传递参数来创建新消息。

这是列出基本配置文件的专家索引以及当前用户向其基本配置文件所在的用户发送新消息的链接:

<div style="margin-top:100px;">
 <h3>Experts</h3>
  <% BasicProfile.all.each do |basic_profile| %>
    <div>
      <p style="padding-top:20px;"> <img src="<%= basic_profile.picture_url %>"    
      style="float: left;margin: 5px;"> 
      <span style="font-size:14px;"><b>
      <%= basic_profile.first_name %> <%= basic_profile.last_name %></b></span></><br>
      <b><i><%= basic_profile.headline %></i></b><br>
      <%= basic_profile.location %><br>
      <%= basic_profile.industry %><br>
      <%= basic_profile.specialties %><br>
      <%= button_to "Send a message", new_message_path(@user) %></p>
   </div>
 <% end %>
</div>

这是专家控制器:

class ExpertsController < ApplicationController
  def index
    @basic_profiles = BasicProfile.all
    @user = User.all
  end
end

这是消息控制器:

class MessagesController < ApplicationController

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

  # POST /message/create
   def create
      @recipient = User.find_by_email(params[:user])
      current_user.send_message(@recipient, params[:body], params[:subject])
      flash[:notice] = "Message has been sent!"
      redirect_to :conversations
    end
  end

这是一条新消息的视图:

 <div style="margin-top:200px;">

   Send a message to

    <%= @user.email %>
    <%= form_tag({controller: "messages", action: "create"}, method: :post) do %>
    <%= label_tag :subject %>
    <%= text_field_tag :subject %>
    <%= label :body, "Message text" %>
    <%= text_area_tag :body %>
    <%= hidden_field_tag(:user, "#{@user.id}") %>
    <%= submit_tag 'Send message', class: "btn btn-primary" %>
   <% end %>
 </div>

以下是消息路由中的内容:

 resources :messages do
    collection do
      post 'new/:user', to: 'messages#create'
    end
    member do
      post :reply
      post :trash
      post :untrash
      post :new
   end

正在使用设计。

我想知道为什么没有将参数传递给视图以获取新消息。

4

1 回答 1

1

一个月前已发布,我不确定您是否知道这一点,但我在尝试解决我自己的 Mailboxer 的不同问题时偶然发现了这个问题。

我有一个与您类似的场景,我想要一个按钮来在他的页面上向用户发送消息。我对新消息的看法与您的 hidden_​​field 相同。

<%= hidden_field_tag(:user, "#{@user.id}") %>

但是,我的 link_to(您有 button_to 的地方)新消息略有不同。我没有传递@user 对象,而是传递了用户的ID)。

<%= link_to "Message This User", new_message_path(:user => @user.id), class: "btn btn-large btn-primary" %>

然后在 messages_controller 中,我使用 find_by(id: 而不是你拥有的 find_by_email。

消息新动作

@user = User.find_by(id: params[:user])

这是传递给 hidden_​​field 的内容。您可以在上面看到显示,再次仅将用户的 id 作为 :user 参数传递给 create 操作。

从那里开始,我们有Messages Create Action

@recipient = User.find_by(id: params[:user])
current_user.send_message(@recipient, params[:body], params[:subject])     

无论如何,不​​确定这是否有帮助,但你去吧。

于 2014-07-23T21:15:37.317 回答