【问题标题】:How can I pass the parameters to controller correctly?如何正确地将参数传递给控制器​​?
【发布时间】:2012-07-21 15:21:56
【问题描述】:
  1. 从显示视图:我想传递显示的消息 ID 以丢弃操作并丢弃消息。

  2. 从索引视图:我想传递检查消息的 ID 以丢弃操作并一次性将它们全部丢弃。

但即使我检查多条记录并从索引视图提交,我也只能一次删除一条记录。
如何使用相同的操作同时归档 1 和 2????

路线

  match 'messages/discard(/:id)' => 'messages#discard', :via => :post , :as => :discard_messages

索引视图

  <%= form_tag(:action => discard, :via => 'post') do %>   
   <% @messages.each do |m| %>
      <tr>
       <td><%= check_box_tag "id",m.id %></td>
       <td><%= m.last_message.id %></td>
       <td><%= 'unread' if m.is_unread?(current_user) %></td>
       <td><%= m.last_message.created_at.to_s(:jp) %></td>
       <td><%= m.last_sender.username %></td>
       <td><%= link_to m.subject, show_messages_path(:id => m, :breadcrumb => @box) %></td>
      </tr>
   <% end %>
   <%= submit_tag "discard", :class => 'btn' %>
  <% end %>

显示视图

<%= link_to 'Discard', discard_messages_path(@messages), :class => 'btn', :method => 'post'  %>

控制器

  def discard  
      conversation = Conversation.find_all_by_id(params[:id])
    if conversation
      current_user.trash(conversation)
      flash[:notice] = "Message sent to trash."
    else
      conversations = Conversation.find(params[:conversations])
      conversations.each { |c| current_user.trash(c) }
      flash[:notice] = "Messages sent to trash."
    end
       redirect_to :back 
  end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 view controller action


    【解决方案1】:

    在您的 html 中使用 [] 命名,然后 rails 将在参数中将其作为数组提供

    index.html.erb

    <td><%= check_box_tag "message_id[]", m.id %></td>
    

    控制器

    # ...
    else
      conversations = Conversation.where("id IN (?)", params[:message_id][])
      # ...
    

    为了进一步简化事情,我将删除您操作中的条件并创建两个单独的操作

    路线

    resource :messages do 
      member do
        post 'discard' # /messages/:id/discard
      end
      collection do
        post 'discard_all' # /messages/discard_all?message_id[]=1&message_id[]=22
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2022-10-31
      相关资源
      最近更新 更多