Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加评论附件(信息部分)_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 添加评论附件(信息部分)

Ruby on rails 添加评论附件(信息部分),ruby-on-rails,ruby,Ruby On Rails,Ruby,我基本上有message和message\u部分模型。我安装了carrierwave,生成了图片上传器,在message和message\u部分都有:picture列,我可以将图片上传到message。当我将图像上载到消息部分时,此图像将覆盖所有其他图像,并且我在消息和消息部分中有相同的图像 我的消息.rb class Message < ActiveRecord::Base belongs_to :speaker has_many :messageparts has_many

我基本上有message和
message\u部分
模型。我安装了
carrierwave
,生成了图片上传器,在
message
message\u部分都有
:picture
列,我可以将图片上传到
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
我的消息控制器

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 %>

:text,input_html:{:rows=>10,:class=>“span6”}%>
'btn自定义'%>
我的邮件视图

<%= 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 %>

:text,:input_html=>{'行=>10}%>
类别:
我的图片上传器

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
class PictureUploader[200300]
#
#def刻度(宽度、高度)
#做点什么
#结束
#创建上载文件的不同版本:
#版本:thumb do
#处理:调整_的大小以适应=>[50,50]
#结束
#添加允许上载的扩展的白名单。
#对于图像,您可以使用以下内容:
def扩展白名单
%w(jpg jpeg gif png)
结束
#覆盖上载文件的文件名:
#避免在此处使用model.id或version\u名称,有关详细信息,请参阅uploader/store.rb。
#def文件名
#“something.jpg”如果是原始文件名
#结束
结束

我想为两个型号使用两个单独的上传器,即使它们几乎相同。它将使您的对象保持良好和整洁的命名,而无需担心覆盖

你的表格呢

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


将同时更新
@message
@message.messageparts

你能把你的代码放进你的
PictureUploader
吗?我只放了图片上传器代码。这样我就可以运行rails生成上传器PicturePart了?然后参考:messagepart模型中的picturepart?这就应该解决了吗?单独的上传程序只是对代码结构的一个建议。问题主要与形式有关
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
<%= simple_form_for([@message, @message.messageparts.build], html: { multipart: true } ) do |f|%>