2013-10-21 163 views
0

在我看來很標準的更新,但是在提交put請求時,屬性不會更新。這裏是我的相關型號:Rails沒有更新屬性

class Vendor < ActiveRecord::Base 

    geocoded_by :address 
    after_validation :geocode, 
     :if => lambda{ |obj| obj.address_changed? } 
end 

我的控制器方法:

def edit 
    @vendor = Vendor.find(params[:id]) 
end 

def update 
    @vendor = Vendor.find(params[:id]) 
    if @vendor.update_attributes(vendor_params) 
     redirect_to vendors_mgmt_path 

    else 
     render 'edit' 
    end 
end 

def vendor_params 
    params.permit(:id, :name, :address, :image, :latitude, :longituded) 
end 

我看到這個在服務器日誌試圖更新後:

Started PUT "/vendors/1" for 127.0.0.1 at 2013-10-20 20:44:54 -0700 
Processing by VendorsController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"fTbZVEfckQz4xQzY5xSMQCArrGZqymNsVeyic/PXKcE=", "vendor"=>{"name"=>"Store", "address"=>"1221 E. Main St."}, "commit"=>"Save changes", "id"=>"1"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
    Vendor Load (0.2ms) SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = ? LIMIT 1 [["id", "1"]] 
Unpermitted parameters: utf8, _method, authenticity_token, vendor, commit 
    (0.1ms) begin transaction 
    (0.1ms) commit transaction 
Redirected to http://localhost:3000/vendors/mgmt 
Completed 302 Found in 10ms (ActiveRecord: 0.6ms) 

這讓我困惑,因爲供應商表格看起來像這樣,並且沒有真實性標記等。

<h1>Update <%= "#{@vendor.name}" %></h1> 

<%= form_for(@vendor) do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :address %> 
    <%= f.text_field :address %> 

    <%= f.label :Logo %> 
    <%= f.file_field :image %> 

    <%= f.submit "Save changes", class: "btn btn-success" %> 
<% end %> 

任何人都看到任何明顯的錯誤?任何幫助深表感謝。提前致謝!

回答

2

默認情況下,Rails會在所有表單中包含特定的隱藏字段,例如authenticity_token,它用於停止CSRF。 (更多信息here)我將建議改變路線:

params.permit(:id, :name, :address, :image, :latitude, :longituded) 

到:

params.require(:vendor).permit(:id, :name, :address, :image, :latitude, :longituded) 

改變你的控制器應允許由形式,不只是那些提交的其他參數這一行在vendor參數。

此外,您拼錯「經度」,我不確定是否會造成任何額外的麻煩,或者它只是您的問題中的拼寫錯誤。

+1

Presto,很高興知道有關隱藏屬性。感謝您也收到拼寫錯誤。 – settheline