使用复选框多次更新布尔状态(Rails 3)



这个问题我相信它并不难,但作为新的轨道我有点迷路了。看完Railscasts第52集后,我继续制作我自己的发布/取消发布幻灯片列表。

这是form view

    = form_tag publish_admin_category_slides_path(@cat4), :method => "put"  do 
#pricing    
    %table#plans
        %thead
            %tr
                %th Image
                %th Published
        %tbody
        - @image.each do |im|
            %tr.odd
                %td
                    = image_tag im.avatar.url(:thumb)
                    = link_to "Delete", admin_category_slide_path(@cat4,im), :method =>  "delete"
                    %span is
                %th 
                    = check_box_tag "slide_published[]", im.published ,im.published

带有控制器动作#publish

    def publish
    Slide.update_all(:published => params[:slide_published])
    redirect_to :action => "index"
    end

这样写的正确方法是什么?一个列表与复选框,改变一个属性和多个更新布尔状态?

我发现了一些类似的东西。我把它贴出来,以防有人有类似的问题

def publish
            @cat = Category.find(params[:category_id])
          if params[:slide_published]
             checked_slides = Slide.find(params[:slide_published])
          end
          unless checked_slides.blank?
            @cat.slides.all.each do |slide|
                if checked_slides.include?(slide)     
                    slide.update_attribute :published, true unless slide.published?   
                else
                    slide.update_attribute :published, false unless !slide.published?   
                end
            end
          end
          if checked_slides.blank?
            @cat.slides.all.each do |slide|
                slide.update_attribute :published, false unless !slide.published?
            end
          end

最新更新