Ruby on rails Rails:带carrierwave的嵌套形式
我不确定嵌入类的控制器中应该包含什么。传递的参数确实显示了所有嵌入的类属性,包括图像属性,但只有非图像参数保存在数据库中。这告诉我,问题不在于ORM的选择(本例中为Mongoid),而在于我使用载波的方式:Ruby on rails Rails:带carrierwave的嵌套形式,ruby-on-rails,mongoid,nested-forms,carrierwave,Ruby On Rails,Mongoid,Nested Forms,Carrierwave,我不确定嵌入类的控制器中应该包含什么。传递的参数确实显示了所有嵌入的类属性,包括图像属性,但只有非图像参数保存在数据库中。这告诉我,问题不在于ORM的选择(本例中为Mongoid),而在于我使用载波的方式: Parameters: {"article"=>{"name"=>"New article", "comments_attributes"=>{"0"=>{"remote_image_url"=>"", "name"=>"Comment 1", "co
Parameters: {"article"=>{"name"=>"New article", "comments_attributes"=>{"0"=>{"remote_image_url"=>"", "name"=>"Comment 1", "content"=>"comment content....", "image"=>#<ActionDispatch::Http::UploadedFile:0x10339d880 @headers="Content-Disposition: form-data; name=\"article[comments_attributes][0][image]\"; filename=\"dh.png\"\r\nContent-Type: image/png\r\n", @original_filename="dh.png", @tempfile=#<File:/var/folders/A1/A1SUPUTUFA8BYB5j+RD2L++++TI/-Tmp-/RackMultipart20120228-21178-1vckii1-0>, @content_type="image/png">}}, "content"=>"article content"}, "commit"=>"Create Article", "authenticity_token"=>"i14YuJs4EVKr5PSEw9IwKXcTbQfOP4mjbR95C75J2mc=", "utf8"=>"\342\234\223"}
MONGODB (89ms) freedb['system.namespaces'].find({})
MONGODB (0ms) freedb['articles'].insert([{"name"=>"New article", "comments"=>[{"name"=>"Comment 1", "_id"=>BSON::ObjectId('4f4daf6a58001652ba000012'), "content"=>"comment content...."}], "_id"=>BSON::ObjectId('4f4daf6958001652ba000011'), "content"=>"article content"}])
子模型:
require 'carrierwave/mongoid'
class Comment
include Mongoid::Document
field :name, :type => String
field :content, :type => String
field :image, :required => true
field :remote_image_url
embedded_in :article, :inverse_of => :comments
mount_uploader :image, ImageUploader
end
父控制器:
def new
@article = Article.new
@article.comments.build
end
def create
@article = Article.new(params[:article])
end
父窗体:
<%= form_for(@article, :html => {:multipart => true}) do |f| %>
<div class = "field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<%= f.fields_for :comments do |c| %>
<p>
<%= c.label :name %>
<%= c.text_field :name %>
</p>
<p>
<%= c.label :image, "Select Screenshot from your Computer"%><br />
<%= c.file_field :image %>
</p>
<p>
<%= c.label :remote_image_url, "or URL from the interweb"%><br />
<%= c.text_field :remote_image_url %>
</p>
<% end %>
<div class = "actions">
<%= f.submit %>
</div>
<% end %>
{:multipart=>true})do | f |%>
Carrierwave使用一些回调来保存模型中的图像和数据。默认情况下,嵌入式模型没有回调执行。您需要明确地说,您的嵌入需要执行他的回调
为此,请使用cascade\u回调:true
选项
embeds_many :comments, cascade_callbacks: true
我以前也面临同样的问题。戴夫为我工作。谢谢,这完全有帮助。
embeds_many :comments, cascade_callbacks: true