2013-05-01 66 views
0

好这个问题我确定它并不难,但是对于rails来说我是新手,我有点迷路。 在观看Railscasts第52集后,我继续制作自己的发布/未发布幻灯片列表。带复选框的多更新布尔状态(Rails 3)

所以这是表单视图

= 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 

什么会写这样的事情的正确方法? 带有复选框的列表改变了属性和多重更新的布尔状态?

回答

1

一些xp l8r我能够找到像这样的东西。 我贴吧,以防某人有类似问题

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