2017-05-12 19 views
0

と属性:ネストされたが、私は2つのモデル持っている画像アップロード

class Campaign < ApplicationRecord 
    has_many :questions 
    validates_presence_of :name 

    accepts_nested_attributes_for :questions 
end 


class Question < ApplicationRecord 
    belongs_to :campaign 
    has_many :answered_questions 
    has_many :answers, through: :answered_questions 


    has_attached_file :image, :storage => :cloudinary, :path => ':id/:style/:filename', styles: { medium: "300x300>", thumb: "100x100>" } 
    validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/ 

    validates_presence_of :title, :image, :campaign_id 

    validates_associated :campaign 

    def image_url 
     image.url(:thumb) 
    end 

end 

を、私は私がキャンペーン

キャンペーンCONTROLLER

def new 
     @campaign = Campaign.new 
     @questions_builded = @campaign.questions.build 
    end 

    def create 
     @campaign = Campaign.new(campaign_params) 

     respond_to do |format| 
      if @campaign.save 
      format.html { redirect_to @campaign, notice: 'Campanha foi criada com sucesso' } 
      format.json { render :show, status: :created, location: @campaign } 
      else 
      format.html { render :new } 
      format.json { render json: @campaign.errors, status: :unprocessable_entity } 
      end 
     end 
    end 
private 

     def campaign_params 
      params.require(:campaign).permit(:name, :active, questions_attributes: [:id, :title, :image, :campaign_id]) 
     end 

キャンペーン/ _formを作成するのと同じ_formに質問を作成します。 html.erb

<%= form_for @campaign, html: { multipart: true } do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %><br /> 

    <%= f.radio_button(:active, true) %> 
    <%= f.label :active, 'Ativado', :value => true %> 

    <%= f.radio_button(:active, false) %> 
    <%= f.label :active, 'Desativado', :value => false %> 

     <%= f.fields_for :questions, @questions_builded do |q| %> 
     <%= q.label :title %> 
     <%= q.text_field :title %><br /> 

     <%= q.label 'Imagem' %> 
     <%= q.file_field :image %><br /> 
     <% end %> 

    <%= f.submit %> 
<% end %> 

私はフォームを送信すると、端末は私がストレージに画像を宝石クリップや宝石「クリップ-cloudinary」を使用し、このエラーが表示され、何も

Started POST "/campaigns" for 127.0.0.1 at 2017-05-12 14:23:45 -0300 
Processing by CampaignsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"tLnQyhz5bzs5B+REReoP10mnxTlCA+6MR1qFgL3D750AJy8L8g0RprtpweBCSP7uvwEmFwgqo+IG8b/gBbIUnQ==", "campaign"=>{"name"=>"qwqwqwwqqw", "active"=>"true", "questions_attributes"=>{"0"=>{"title"=>"popooppoop", "image"=>#<ActionDispatch::Http::UploadedFile:0xb52904a4 @tempfile=#<Tempfile:/tmp/RackMultipart20170512-10982-1c5tt8u.jpg>, @original_filename="Aluguel-de-carro-na-Grécia.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"campaign[questions_attributes][0][image]\"; filename=\"Aluguel-de-carro-na-Gr\xC3\xA9cia.jpg\"\r\nContent-Type: image/jpeg\r\n">}}}, "commit"=>"Create Campaign"} 
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-1yj8kga.jpg' 
Command :: PATH=/usr/local/bin/:$PATH; identify -format '%wx%h,%[exif:orientation]' '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' 2>/dev/null 
Command :: PATH=/usr/local/bin/:$PATH; identify -format %m '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' 
Command :: PATH=/usr/local/bin/:$PATH; convert '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' -auto-orient -resize "300x300>" '/tmp/8c747e6a91db0fc3579f3c740443c72120170512-10982-1e4nolk' 
Command :: PATH=/usr/local/bin/:$PATH; identify -format '%wx%h,%[exif:orientation]' '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' 2>/dev/null 
Command :: PATH=/usr/local/bin/:$PATH; identify -format %m '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' 
Command :: PATH=/usr/local/bin/:$PATH; convert '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-16bluom.jpg[0]' -auto-orient -resize "100x100>" '/tmp/8c747e6a91db0fc3579f3c740443c72120170512-10982-13fpuuf' 
    (0.1ms) BEGIN 
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/30d1c81ad380893c238e4a9d175a478420170512-10982-v99csi.jpg' 
    (0.1ms) ROLLBACK 
    Rendering campaigns/new.html.erb within layouts/application 
    Rendered campaigns/_form.html.erb (3.6ms) 
    Rendered campaigns/new.html.erb within layouts/application (4.5ms) 
    Rendered layouts/_header.html.erb (0.9ms) 
Completed 200 OK in 211ms (Views: 36.6ms | ActiveRecord: 0.2ms) 

を作成されません。

PSは:質問で/ _form.html.erbは、ロールバックがおそらくあなたはそれを保存しようとすると、あなたのモデルが有効でないことを示し

答えて

1

正常に動作します。これは推測ですが、質問後にキャンペーンが保存されているため、おそらくvalidates_associated :campaignと関係がありますか?

このような状態では、ログにデバッガやログの状態を使用するのが好きです。たとえば、コントローラに保存しようとする前にモデルが有効かどうかを確認するログステートメントを追加することができます。

@campaign.valid?; logger.info(@campaign.errors.full_messages) 
+0

私はあなたの提案に続き、今、このメッセージを返します。「[」質問のキャンペーンが存在しなければならない「 『質問のキャンペーンは空白にすることはできません』]」 – Eduardorph

+0

質問はキャンペーン前に、その保存されていることを確認したこと質問モデルの 'validates_associated:campaign'のために保存に失敗しています。この検証を保持したい場合は、まずキャンペーンモデルを保存してから、質問を保存してください。 – Puhlze

+0

validates_associated:キャンペーンを削除し、@ campaign.saveの中に@ campaign.questions.create(campaign_id:@ campaign.id)を入れてもまだ動作しません – Eduardorph

関連する問題