预填充表单字段,其中包含Rails中前一页的数据

时间:2015-01-19 21:27:12

标签: javascript ruby-on-rails ruby forms mailboxer

我最近在我的Rails应用程序中添加了Mailboxer,并且一切正常。

但是,我希望能够通过单击用户页面上的“消息我”按钮创建新消息,然后在创建表单的同时填写收件人(使用前一页中的用户)消息加载。

有问题的特定领域:

<%= select_tag 'recipients', recipients_options, multiple: true, class: 'new_message_recipients_field' %>

作为参考,recipients_options可能不会在这种情况下发挥作用,但它是所有用户的列表 - 我主要在使用除了用户页面之外的任何地方创建消息时使用 - 并在我的消息助手

中定义
def recipients_options
  s = ''
  User.all.each do |user|
    s << "<option value='#{user.id}'>#{user.first_name} #{user.last_name}</option>"
  end
  s.html_safe
end

我的messages_controller.rb

def new
end

def create
  recipients = User.where(id: params['recipients'])
  conversation = current_user.send_message(recipients, params[:message][:body], params[:message][:subject]).conversation
  flash[:success] = "Message has been sent!"
  redirect_to conversation_path(conversation)
end

我已经在每个用户页面上都有新消息表单的链接......

<%= link_to 'Message me', new_message_path %>

但我不知道如何在后续表格中预先填写收件人。

有关我将如何处理的任何建议?

2 个答案:

答案 0 :(得分:3)

link_to代码更改为:

<%= link_to 'Message me', new_message_path(recipient_id: @user.id) %>

messages#new操作中,添加以下代码:

def new
  @users = User.all
end

并且,在消息表单中,将select_tag替换为:

<%= select_tag 'recipients', options_from_collection_for_select(@users, :id, :first_name, params[:recipient_id]), multiple: true, class: 'new_message_recipients_field' %>

我在收件人选择中做了一些更改。您可以使用options_from_collection_for_select方法生成该选项,而不是实现自己的帮助程序。

参考:http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select

答案 1 :(得分:0)

我正在使用Mailboxer,我可以从列表页面联系卖家。

用户点击列表页面上的联系卖家按钮,然后在下一页上填写卖家名称的收件人:表单。

我有与消息控制器中相同的Create方法。但在新方法中我有这个:

MessageController

  def new
    @chosen_recipient = User.find_by(id: params[:to].to_i) if params[:to]
  end

我的商家信息页面上的联系按钮:

</p>
  <strong>Contact Seller about "<%= @listing.title %>"</strong></br>
  <%= link_to "Send message to #{@listing.user.name}", new_message_path(to: @listing.user.id), class: 'btn btn-default btn-sm' %>
<p>

新消息表单:

<%= form_tag messages_path, method: :post do %>
  <div class="form-group">
    <%= label_tag 'message[subject]', 'Subject' %>
    <%= text_field_tag 'message[subject]', nil, class: 'form-control', required: true %>
  </div>

  <div class="form-group">
    <%= label_tag 'message[body]', 'Message' %>
    <%= text_area_tag 'message[body]', nil, cols: 3, class: 'form-control', required: true %>
  </div>

  <div class="form-group">
    <%= label_tag 'recipients', 'Choose recipients' %>
    <%= select_tag 'recipients', recipients_options(@chosen_recipient), multiple: true, class: 'form-control chosen-it' %>
  </div>

  <%= submit_tag 'Send', class: 'btn btn-primary' %>
<% end %>

希望这有帮助!