2011-08-21 51 views
0

我有三個型號:這段代碼中的編輯和新操作是什麼?

class Country < ActiveRecord::Base 
    has_many :regions 
    has_many :assets, :dependent => :destroy 
    accepts_nested_attributes_for :assets 
end 


class Region < ActiveRecord::Base 
    belongs_to :country 
    has_many :appartments 

    has_many :assets, :dependent => :destroy 
    accepts_nested_attributes_for :assets 
end 


class Asset < ActiveRecord::Base 
    belongs_to :region 
    belongs_to :country 
    has_attached_file :image, 
    :styles => { 
     :thumb=> "100x100>", 
     :small => "300x300>", 
     :large => "600x600>" 
    } 
end 

可以給我一些解釋一下什麼是編輯和新方法/措施是區域控制器,存儲資產(圖片)?

+0

如果你使用'accepts_nested_attributes_for:assets'您所在區域的模型裏面,比動作將與創建/編輯區域相同。所以實際的資產存儲將在區域保存時生成(在regions_controller#create&regions_controller#更新操作中) – Hck

回答

1

下面是如何通過以特定方式構建表單來實現它的示例。它應該適用於新操作和更新操作。

<%= form_for @region do |f| %> 
    <%= f.fields_for :assets, @region.assets.build do |fa| %> 
    <%= fa.file_field :image %> 
    <% end %> 
<% end %> 

這樣做是爲了首先爲@region實例創建表單。由於您擁有accepts_nested_attributes_for :assets,因此您可以使用fields_for方法處理關聯。符號:assets指示要從中讀取哪個關聯,但由於您想添加新圖像而不適用於現有圖像,因此可以添加第二個參數,該參數是由build方法創建的單個新Asset屬性實例。

然後最後你可以添加file_field實際上傳文件。

如果以這種方式構建表單,則不必在控制器內部更改操作代碼。

編輯:

這裏是如何newcreate行動可能看起來像以使視圖工作:

def new 
    @region = Region.new 
    # Add respond_to or respond_with if you want 
end 

def create 
    @region = Region.new(params[:region]) 
    if @region.save 
    render :action => :show 
    else 
    render :action => :new 
    end 
end 
+0

我無法實現此功能。你能告訴我如何我的新和創建方法 – Remco

+0

張貼在表單@ region.assets.build,但我得到了一個錯誤消息「未定義的方法'資產' – Remco

+0

當然,我已經編輯我的答案。 – DanneManne