我在下面有这个表单,我想一次更新多个对象的相同属性。 这并不像在表单外移动提交按钮那么容易,因为我已经尝试过了。

http://i.stack.imgur.com/HXeSn.png

以下是观点 (借助引导)

- @venues.each do |venue|
.row.placeholders
    = form_for :venue do |f|
      - Venue::ACTIVE_FEATURES.each do |active_feature|
        = check_box_tag "venue[active_features][]", active_feature, @venues.first.active_features.include?(active_feature), disabled: true
        = h active_feature.humanize
        %br/
      = hidden_field_tag "venue[active_features][]", ""
    %span.text-muted
  .col-xs-6.col-sm-3.col-md-2.placeholder
    %h4 Contact
    %span.text-muted
      = form_for :venue, :url => {:action => :update}, :method => "put" do |f|
        OpenTable Rep:
        = f.text_field :opentable_rep
        %br/
        General Manager:
        = f.text_field :general_manager
        %br/
        = f.submit 'Save Edits'
%hr

调节器

class SnapshotsController < ApplicationController

  def show
    @venues = Venue.where(parent_venue_id: current_admin.parent_venue_id)
  end

  def update
    @venues = Venue.where(parent_venue_id: current_admin.parent_venue_id)
    if @venues.update_attributes(opentable_rep: params[:venue][:opentable_rep], general_manager: params[:venue][:general_manager])
      redirect_to snapshot_path
      flash[:notice] = "Your changes were saved"
    else
      render :show
      flash[:notice] = "Changes didn't save correctly"
    end
  end

end

这是我尝试过的

查看

      = form_for :venue, :url => {:action => :update}, :method => "put" do |f|
        - @venues.each do |venue|
              - Venue::ACTIVE_FEATURES.each do |active_feature|
                = check_box_tag "venue[active_features][]", active_feature, @venues.first.active_features.include?(active_feature), disabled: true
                = h active_feature.humanize
                %br/
              = hidden_field_tag "venue[active_features][]", ""
              %span.text-muted
            .col-xs-6.col-sm-3.col-md-2.placeholder
              %h4 Contact
              %span.text-muted
                OpenTable Rep:
                = f.text_field :opentable_rep
                %br/
                General Manager:
                = f.text_field :general_manager
                %br/
        = f.submit 'Save Edits'

这是一张截图http://i.stack.imgur.com/cs6Us.png

控制器保持与上面相同

我的参数变成了

{"utf8"=>"✓", "_method"=>"put", "venue"=>{"active_features"=>["", ""], "opentable_rep"=>"mary", "general_manager"=>"barry"}, "commit"=>"Save Edits", "action"=>"update", "controller"=>"snapshots"}

我希望/需要params,如果它们变为EACH对象,并在提交时更新它们。

任何代码建议?

===============>>#1 票数:0

查看

= form_for :venue, :url => {:action => :update}, :method => "put" do |f|
- @venues.each do |venue|
      %h4 Contact
      %span.text-muted
        = f.label :opentable_rep, "OpenTable Rep"
        = f.text_field :opentable_rep, name: "venue[#{venue.id}][opentable_rep]", value: venue.opentable_rep, placeholder: "email"
        = f.label :general_manager, "General Manager"
        = f.text_field :general_manager, name: "venue[#{venue.id}][general_manager]", value: venue.general_manager, placeholder: "email"
        %br/
  %hr
= submit_tag "Save Edits"

控制器

class SnapshotsController < ApplicationController

  def update
    @venues = Venue.where(parent_venue_id: current_admin.parent_venue_id)
    if params[:venue] != nil
        params[:venue].keys.each do |venue_id|
          opentable_rep = params[:venue][venue_id][:opentable_rep]
          general_manager = params[:venue][venue_id][:general_manager]
          @venues.update(venue_id, {opentable_rep: opentable_rep, general_manager: general_manager}).touch
        end
      redirect_to snapshot_path
      flash[:notice] = "Your changes were saved"
    else
      render :show
      flash[:notice] = "Changes didn't save correctly"
    end
  end

end

这最终成了我的解决方案。 所有疯狂的参数都在表单中的名称属性中得到了解决。

有没有其他人有重构我的更新操作的解决方案? 看起来有点凌乱。

  ask by gary1410 translate from so

未解决问题?本站智能推荐:

1回复

在Rails的一种表单上提交一个类的多个对象

我仍然对form_for或form_tag的第一个参数以及何时使用哪个参数感到form_tag 。 但基本上,我正在建立一个网站,访客可以在该网站上发布音乐会活动。 事件是一个模型。 管理员可以看到已提交事件的列表,我希望每个事件都有一个复选框,然后管理员可以检查他要批准的事件并在表单上单
1回复

一种在Rails中更新多个页面的表单

对Rails还很陌生。 我正在尝试创建一个更新两个模型的表单,并输出到两个单独的显示页面。 一是可能,二是如何? 我看到很多关于一种表单能够更新多个模型的帖子,但是不确定是否可以使用一种表单创建两个单独的页面。 编辑: 到目前为止,感谢您的评论。 并且,对不起您的不清楚。
2回复

使用复选框/错误数量的参数rails 4以一种形式更新多个记录

我一直在教程/论坛中摸索,试图弄清楚如何使用复选框更新多种方法。 我需要能够列出我的“事件”,如果日期可用,可以选中或取消选中它们。 我想以一种形式进行此操作。 我知道这是可能的,但是在无法正常工作后,我终于来了。 使用我发布的代码,我收到“错误的参数数量,2对1”错误。
1回复

Rails 4,以一种形式编辑多个模型

我正在研究以下功能: 在一页中,用户可以一次上传多张图片,然后在下一页上,他可以编辑这些图片的字段。 因此,我基本上想要的是一次可以同时编辑多个模型的表单(该模型尚未保存在数据库中)。 该应用程序使用https://github.com/bootstrap-ruby/rails
1回复

以一种形式编辑多个记录-Rails

我正在尝试使用一种表单来编辑多个记录,因此用户可以编辑一些记录,然后在末尾而不是在每个单独的记录之后按Submit。 我已经发布了当前的代码,但出现此错误: 控制者 视图 路线
1回复

Rails:如何以一种形式构建一批对象

我正面临一个棘手的挑战(作为Rails的初学者),到目前为止,我还没有找到能满足我需求的解决方案。 我有一个具有has_many :events的User模型。 这是我当前用于创建事件的表格: 为了显示用户友好的表单,我不仅想一次发布一个事件,而且还要发布多个具有相同值的事件
2回复

如何在Rails 4中以一种形式添加多个多对多字段?

我的表格具有以下关联: Course.rb Skill.rb 我想做的是允许想要添加新Course的人从所选类别中选择所有技能,并能够使用复选框添加这些技能。 在视图中,我这样做是这样的: 视图 遗憾的是,这不起作用,并且出现以下错误: 您能帮我解决
1回复

具有多个对象的一种模型的形式

UPD。 我需要在一个表单中显示单个模型的多个记录。然后在更新一些值之后,我需要一次保存所有记录数据..那就是我的表单视图应该像电子表格一样工作。 要求是,我需要从一张表中获取数据并以表格的形式填充所有行。 之后,我必须编辑一些列,然后一次将这个模型的所有记录保存到数据库中。
1回复

具有一种形式和许可参数的多个对象

我的Rails应用程序有一个游戏模型,每个游戏都有多个玩家。 创建游戏后,将使用默认名称创建一定数量的玩家,如下所示: 重定向会将用户带到具有表单的页面,该表单包含每个玩家名称的输入。 与此页面相关的操作是: 编辑页面本身是: 这是routes.rb: 我收到
1回复

一种Rails形式的多个不相关的模型

我正在Rails 3中构建一个博客样式的应用程序,其中多个用户可以发布一些新闻。 登录后(通过“ Authlogic”实现),用户值存储在称为“ UserSession”的自己的模型中。 帖子的表单包含标题,内容等,并且用户名应以隐藏的形式存储。 我认为这两个模型不需要相互关联(因为我