使用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
正在使用Devise。
我想知道为什么没有将params传递给视图以获取新消息。
答案 0 :(得分: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 param传递给create action。
然后,我们将拥有消息创建操作
@recipient = User.find_by(id: params[:user])
current_user.send_message(@recipient, params[:body], params[:subject])
无论如何,不确定这是否有帮助,但你去了。