【问题标题】:update multiple records in one form using checkboxes / wrong number of arguments rails 4使用复选框/错误数量的参数以一种形式更新多条记录 rails 4
【发布时间】:2014-10-08 04:10:55
【问题描述】:

我一直在摸索教程/论坛,试图弄清楚如何使用复选框更新多个方法。

如果日期可用,我需要能够列出我的“事件”并选中或取消选中它们。我想在一个表格上做到这一点。我知道这是可能的,但我在失败后终于来到这里。

使用我发布的代码,我收到“参数数量错误,2 比 1”错误。

我已经尝试过这些信息来源: http://railscasts.com/episodes/52-update-through-checkboxes http://discuss.codeschool.io/t/surviving-apis-with-rails-posting-multiple-records/4776/4 http://railscasts.com/episodes/165-edit-multiple-revised

这就是我所在的地方

routes.rb

resources :events do
  collection do
    put  :verified
    post :make_events
  end
end

events_controller.rb

def verified
  if Event.update_all(["available", true], :id => params[:event_ids])
    redirect_to step2_path(:pid => @project.id,  :u => current_user.id)
  else
  end
end

show.html.erb

<%= form_tag verified_events_path(:pid =>  @project.id ), method: :put  do  %>
  <table class="table-event-dates">
    <thead>
    <tr>
      <th> </th>
      <th> </th>
    </tr>
    </thead>
    <tbody>
    <tr><% @these_events.each do |event| %>

        <td><%= check_box_tag "event_id[]", event.id, :value => event.available  %></td>
        <td><label> <%= event.date.strftime("%A, %b. %d %G") %></label></td>
        </tr>
        </tbody>
      <% end %>
      </table>

  </div><br><!-- panel-body -->
  <div class="panel-footer2">
    <div class="row">
      <%= submit_tag 'Verify Dates',  :class => 'btn btn-green btn-lg btn-block' %>
<% end %>

【问题讨论】:

  • 您在哪一行出现此错误?此外,您的标记不正确:&lt;% end %&gt; 应该在 &lt;/tr&gt; 之前
  • 我在控制器中有它:“ if Event.update_all(["available", true], :id => params[:event_ids])" 并感谢您的标记修复。

标签: ruby-on-rails forms checkbox updatemodel


【解决方案1】:

这个问题已经过时了一段时间,但对于它的价值,代码中的另一个错误是:NothingToSeeHere 在评论中提到的代码是:

在视图中你有单数 event_id

<%= check_box_tag "event_id[]", event.id, :value => event.available  %>

在控制器中你有多个 event_ids

Event.update_all(["available", true], :id => params[:event_ids])

两个参数都需要匹配并且是复数。 Zishe 最后一个关于如何在控制器端处理更新的示例是 Rails 4 的约定。

<%= check_box_tag "event_ids[]", event.id, :value => event.available  %>
Event.where( :id => params[:event_ids] ).update_all( :available => true )

【讨论】:

    【解决方案2】:

    可能它应该以老式风格工作:

    Event.update_all("available = 1", ["id in (?)", params[:event_ids]])
    

    也许是available = true'true',我不确定。或者:

    Event.update_all(["available", true], ["id in (?)", params[:event_ids]])
    

    但是,也许您应该清除参数。检查它们的格式是否正确 (1, 2, 4..)。

    你也可以试试这个:

    Event.where(id: params[:event_ids]).update_all(available: true)
    

    【讨论】:

    • 这些我都试过了。我再次尝试它们只是为了确保,尽管最后一个消除了错误....它没有对数据库进行任何更改。这是我的问题......要么我收到“参数”错误,要么表单无法触及数据库。 if/else 就像方法成功一样重定向,但事实并非如此。我被困住了。不过谢谢。
    • 我应该注意,您的回答确实解决了我所要求的错误,因此我会将其标记为有用...但对于其他人来说,阅读,我的代码中还有一些其他错误是阻止记录提交到数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多