2015-10-09 49 views
1

我想提出一個網格格式如下面的一個,空的屬性列表來改變Ruby on Rails的

enter image description here

show.html.erb

<%= form_for :datadef, url: update_all_vmodule_path do |fdf|%> 
     <table id="csvfiles" class="display" width="100%"> 
     <thead> 
      <tr> 
      <th width="10%">Column No</th> 
      <th width="20%">Column name</th> 
      <th width="20%">Data type</th>    
      <th width="15%">Column format</th> 
      <th width="10%">Length</th> 
      <th width="25%">Comments</th> 
      </tr> 
     </thead> 
     <tbody>    
      <% @datadefrecords.each do |ddre| %> 
      <%= fields_for "datadef_records[]", ddre do |dr_fld| %> 
      <tr>     
       <td><%= ddre.column_no %></td> 
       <td><%= ddre.column_name %></td> 
       <td><%= dr_fld.collection_select :column_datatype, Datadef.select(:column_datatype).uniq, :column_datatype, :column_datatype, {:prompt => true} %> </td> 
       <td><%= dr_fld.text_field :column_format %></td> 
       <td><%= dr_fld.text_field :column_length %></td> 
       <td><%= dr_fld.text_field :comments %></td> 
      </tr> 
      <% end %> 
      <% end %>     
      <tr> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td>      
       <td colspan="2"><%= fdf.submit 'Save' %>&nbsp;&nbsp;<%= link_to("<button>Cancel</button>".html_safe, cancelmodal_vmodule_path) %></td> 
      </tr>         
     </tbody> 
     </table>   
    <% end %> 
<% end %> 

這我要求提交的方法

def update_all 
    session[:datadef] = nil  
    @updatedatadef = Datadef.all.where(:id => params[:datadef_records]).update_all(update_all_params)  
    redirect_to migproject_path(params[:vmodule][:migproject_id]) 
    end 

這是強大的參數

def update_all_params 
    params.require(:datadef_records).permit(:column_datatype, :column_format, :column_length, :comments) 
    end 

這是我如何從形式

{"utf8"=>"✓", 
"authenticity_token"=>"QrX8JYYYQOlfwKgAABJd0+A7VpugS2Y6n8doDsuKqeM=", 
"datadef_records"=>{"12"=>{"column_datatype"=>"varchar", 
"column_format"=>"2", 
"column_length"=>"2", 
"comments"=>"2"}, 
"13"=>{"column_datatype"=>"varchar", 
"column_format"=>"2", 
"column_length"=>"2", 
"comments"=>"2"}}, 
"commit"=>"Save", 
"id"=>"2"} 

的參數,但我得到這個「屬性的空單變化」錯誤,是不是讓我寫呢在桌子裏。而且我無法確定可能的錯誤。

在此先感謝。

+0

「update_all_params」的輸出是什麼 – PhilVarg

+1

表中有2條記錄的id爲(12,13)的記錄。
「column_datatype」=> 「VARCHAR」, 「column_format」=> 「2」, 「column_length」=> 「2」, 「評論」=> 「2」
這些數據應該被寫入。 –

回答

0

我認爲問題的關鍵在於你對update_all的使用,儘管我並不是100%確定問題的語法。

據我所知,update_all需要一個實際的參數哈希來填充您的數據;即使那樣,它也只會更新你傳給它的東西(有點像update_attributes)。

Here's a good reference

data = params[:datadef_records] 
@updatedatadef = Datadef.update(data.keys, data.values) 

這否定了利用你strong_params,這我會建議使用。我不得不花一些時間考慮讓它工作。