2015-12-04 121 views
0

我基本上有消息和message_part模型。我安裝了carrierwave,生成了圖片上傳器,在messagemessage_part都有:picture列,我可以上傳圖片到message。當我將圖片上傳到message_part時,此圖片覆蓋了所有其他圖片,我在messagemessage_part中擁有相同的圖片。添加評論附件(message_part)

我Message.rb

class Message < ActiveRecord::Base 
    belongs_to :speaker 
    has_many :messageparts 
    has_many :message_categories 
    has_many :categories, through: :message_categories 
    mount_uploader :picture, PictureUploader 
end 

我message_part.rb

class Messagepart < ActiveRecord::Base 
    belongs_to :message 
    belongs_to :speaker 
    mount_uploader :picture, PictureUploader 
end 

我message_part控制器創建

def create 
    # @message = Message.find(params[:message_id]) 
    @messagepart = @message.messageparts.create(messagepart_params) 
    @messagepart.speaker_id = current_speaker.id 

    if @messagepart.save 
     redirect_to message_path(@message) 
    else 
     render 'new' 
    end 
    end 

我的消息控制器

def create 
    @message = current_speaker.messages.build(message_params) 
    if @message.save 
    redirect_to messages_path 
    else 
    render 'new' 
    end 

    end 

我的消息部分視圖

<%= simple_form_for([@message, @message.messageparts.build], html: { multipart: true }) do |f| %> 

<%= f.input :contentparttitle, label: "Part Title" %> 
<%= f.input :contentpart, label: "Content Part", :as => :text, input_html: { :rows => 10, :class => "span6" } %> 
<%= f.file_field :picture %> 
<%= f.button :submit, label: "Add Parts", :class => 'btn-custom' %> 
<% end %> 

我的郵件視圖

<%= simple_form_for @message, html: { multipart: true } do |f| %> 
    <%= f.input :title, label: "Message Title" %> 
    <%= f.input :description, label: "Short Description" %> 
    <%= f.input :content, :as => :text, :input_html => { 'rows' => 10} %> 
    <strong>Category:</strong> 
    <%= f.collection_check_boxes :category_ids, Category.all, :id, :name do |cb| %> 
    <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text} %> 
    <% end %> 
    <%= f.file_field :picture %> 
    <%= f.button :submit %> 
<% end %> 

我的照片上傳

class PictureUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    # include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    storage :file 
    # storage :fog 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # # do something 
    # end 

    # Create different versions of your uploaded files: 
    # version :thumb do 
    # process :resize_to_fit => [50, 50] 
    # end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

end 
+1

你可以把你的代碼在'PictureUploader'? – Yang

+0

我只是把圖片上傳代碼。 – user554505

回答

0

我想用兩個單獨上傳了兩款車型,即使他們幾乎完全相同。它會保持你的對象很好而且整齊地命名,而不必擔心被覆蓋。

而且你的形式

<%= simple_form_for([@message, @message.messageparts.build], html: { multipart: true }) do |f|%> 

將更新都@message@message.messageparts

+0

所以我可以運行rails生成上傳器PicturePart?參考:messagepart模型中的picturepart?那應該照顧它? – user554505

+0

單獨的上傳器只是代碼結構的一個建議。問題主要與形式有關 – Yang