从一个控制器的索引方法传递数据到另一个控制器的创建

时间:2016-09-12 07:00:45

标签: ruby-on-rails actioncable

我生成了一个设计模型User,我也有一个Conversation控制器。我正在显示所有用户,除了登录的用户,我正在尝试在user1和user2之间创建一个新的对话,但我被重定向到对话控制器的索引方法,而不是创建一个。我从这个链接中了解到,从一个控制器到另一个控制器发布帖子是个坏主意Rails: How to POST internally to another controller action?

我还尝试在Users控制器中创建一个send_message方法,并将其定义为路径中的帖子,但我被重定向到Users控制器的show方法。

这样做的干净方法是什么?

class UsersController < ApplicationController
  before_action :authenticate_user!

  def index
    @users = User.where.not(id: current_user.id)
  end

  def send_message
    # @conversation = Conversation.new(conversation_params)
    # if @conversation.save
    #
    # end
  end

end

index.html.erb

    <div class="col-xs-12 col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h1> User's index </h1>

<table class="table table-bordered table-hover">
  <thead>
    <tr>
      <th>Email</th>
      <th>Created</th>
      <th>Actions</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= user.email %></td>
        <td><%= time_ago_in_words(user.created_at) %> ago</td>
        <td>
          <div class="btn-group">
            <%= link_to 'Send', conversations_path(sender_id: current_user.id, recipient_id: user.id) %>
          </div>
        </td>
      </tr>
    <% end %>
  </tbody>
</table>


</div>

编辑:

private
  def conversation_params
     params.require(:conversation).permit(:sender_id, :recipient_id)
  end


<ActionController::Parameters {"_method"=>"post", "authenticity_token"=>"394MDmcVVelccU//8ISYeqmk146exYc6G7SrrAhbCA/yQ/K8KTpSn/0EkXlZ4hB/g==", "recipient_id"=>"1", "sender_id"=>"3", "controller"=>"conversations", "action"=>"create"} permitted: false>

2 个答案:

答案 0 :(得分:0)

默认情况下link_to助手发送GET请求。您可以将method: :post添加到其选项中。

<%= link_to 'Send', path, method: :post %>

答案 1 :(得分:0)

您可以重定向到new_converstion_path而不是conversations_path。默认情况下链接发送GET而不是POST请求。