2013-12-22 22 views
0

我得到了: 安裝了Rails 4,carrierwave和simple_form gems。Rails4。上傳應該屬於模型的多個文件

圖片

class Image < ActiveRecord::Base 
    mount_uploader :image, ImageUploader 
    belongs_to :portfolio, foreign_key: :portfolio_id 

    THUMB_WIDTH = 220 
end 

組合:

class Portfolio < ActiveRecord::Base 
    has_many :images 
end 

組合控制器:

class PortfolioController < ApplicationController 

    def new # render a form to add a portfolio entry 
    @portfolio = Portfolio.new 
    end 

    def create 

    puts ">>>" 
    puts portfolio_params.inspect 
    puts "<<<" 
    entry = Portfolio.new(portfolio_params) 
    entry.save 
    images = Image.create(portfolio_params[:images]) 
    images.portfolio = entry 
    images.save 
    end 

    private 
    def portfolio_params 
     params.require(:portfolio).permit(:title, :description, images: [:image]) 
    end 

end 

組合創建形式(簡體):

<%= simple_form_for @portfolio, method: :post, html: { multipart: true } do |f| %> 
    <%= f.input :title %> 
    <%= f.input :description %> 
    <!-- nested images --> 
    <%= f.simple_fields_for :images do |i| %> 
     <%= i.input :image, as: :file %> 
     <%= i.input :image, as: :file %> <!-- I want 2 files --> 
    <% end %> 
<% end %> 

問題是:圖像應該作爲數組提交,第二個問題是使用強參數。我一直在爲此奮鬥了很長一段時間,嘗試了幾種方法來允許參數不會得到任何異常並讓表單工作。

我在做什麼錯在這裏?

P.S.我在Ruby和Ruby on Rails的新手,請不要怪難;)

回答

3

在你的投資組合模型,你需要添加:

accepts_nested_attributes_for :images 

然後在你的控制,這樣做:

def new 
    @portfolio = Portfolio.new 
    @portfolio.images.build 
    @portfolio.images.build # you wanted 2 
end 

def create 
    @portfolio = Portfolio.create(portfolio_params) 
    redirect_to @portfolio 
end 

private 

def portfolio_params 
    params.require(:portfolio).permit(:title, :description, images_attributes: [:image]) 
end 

然後在您的視圖:

<%= f.simple_fields_for :images do |i| %> 
    <%= i.input :image, as: :file %> 
<% end %> 

我沒有測試出來,但應儘量接近。

+0

我得到'未定義的方法'accept_nested_attributes_for」的管理員:: PortfolioController:Class' – Nemoden

+1

哎呀,錯字,應該是‘accepts_nested_attributes_for’ – mountriv99

+0

順便說一句,U應該把該行的模型,不是你的控制器 – mountriv99

相關問題