2013-05-31 57 views
0

我有一個錯誤:不能轉換成字符串整數上更新

TypeError in PrintsController#update

can't convert String into Integer

我使用的格式代碼是:

<%= form_for @print do |f| %> 
.... 
.... 

<%= f.fields_for :blackwhites_attributes do |blackwhite| %> 
<%= blackwhite.select :newpages , options_for_select((1..(@print.number_of_images_entry)).to_a), {}, :multiple => true, :size => @print.number_of_images_entry %> 
<% end %> 

,而在我的development.log,我看到「newpages」選擇字段中有一個空值。

>  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xAs20vFEt3vEBOhFugOyR0nWIgkoMJ0d4JPbl5E5VQ4=", 
> "print"=>{"quantity"=>"1", "blackwhites_attributes"=>{"newpages"=>["", 
> "2", "3"]}, "comment"=>""}, "commit"=>"Update Print", "id"=>"5"} 
>  User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1000 LIMIT 1 
>  Print Load (0.3ms) SELECT `prints`.* FROM `prints` WHERE `prints`.`id` = ? LIMIT 1 [["id", "5"]] 
>  SQL (0.1ms) BEGIN 
>  (0.1ms) ROLLBACK 
>  Completed 500 Internal Server Error in 6ms 

我blackwhite模型「連載」以及對數字的陣列存儲到數據庫:

class Blackwhite < ActiveRecord::Base 
    attr_accessible :newpages, :print_id 

    serialize :newpages 

    belongs_to :print 

end 

但我發現問題將具有打印控制器更新未建形式和我有建立在Prints_controller

def update 
    @print = Print.find(params[:id]) 
    @print.blackwhites.build 
     if @print.update_attributes(params[:print]) 
     redirect_to @print, :flash => { :success => "Successfully updated your Print Order." } 
     else 
     render :action => 'edit' 
     end 
end 

打印型號:

class Print < ActiveRecord::Base 
     has_many :blackwhites 
     belongs_to :user 

     accepts_nested_attributes_for :blackwhites, :allow_destroy => true 

     attr_accessible :comment, :document, :document_file_name, 
          :document_file_size, :document_updated_at, :is_printing, 
          :is_processing_image, :user_id, :document_content_type, 
          :number_of_images_entry, :is_delivered, :quantity, :blackwhites_attributes 

... 
... 

     end 
+0

你可以發表代碼og打印模型 –

+0

添加打印模型。 – muhammadn

+0

你能發佈完整的堆棧跟蹤嗎? –

回答

0

空字符串可能是select的默認值。你可以通過確保:include_blank和:prompt沒有設置成真正的東西來配置助手不使用它。

另一個潛在的解決方案是擺脫

attr_accessible :newpages 

def newpages 
    self[:newpages].map(&:presence).compact 
end 

和/或

def newpages=(ary) 
    self[:newpages] = ary.map(&:presence).compact 
end 

最後,一個更好的整體解決方案是使用更換FormObject模式而不是accepted_nested_attributes。然後,您可以完全控制模型的建立和保持方式。見這裏的項目#3:http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

+0

瞭解在URL中使用Virtus gem的一部分(除了我加載類的lib /文件夾中的.rb文件 - 仍然試圖找出它) ...以及上面我嘗試過的代碼解決方案並不能解決問題(我曾在黑白模型中使用過) - 錯誤與標題相同。 – muhammadn