2013-08-22 3 views
1

Рубин Версия: 2,0Самовольная параметры: assets_attributes

Rails версии: 4,0

Я нашел сто вопросов с подобными ситуациями в шахте, но ни один из ответов не похоже на работу для меня.

Я использую скрепку и пытаюсь загрузить несколько изображений в article. У меня есть модель assets для этого.

Я вложенные модели внутри формы статьи здесь:

<%= form_for(@article, :html => { :multipart => true }) do |f| %> 
    <% if @article.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2> 

     <ul> 
     <% @article.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br> 
    <%= f.text_area :content %> 
    </div> 

    <%= f.fields_for :assets do |asset| %> 
    <%= asset.file_field :image %><br /> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
<% end %> 

И белый список модели и (что я предполагаю, что буду) своим единственным атрибут - image

def article_params 
    params.require(:article).permit(:title, :content) 
end 

def asset_params 
    params.require(:asset).permit(:image) 
end 

Но я до сих пор получение этого в моем журнале разработки, когда я пытаюсь создать новую статью с изображением:

Unpermitted parameters: assets_attributes

Что мне не хватает? (дополнительные ресурсы ниже):

article.rb

class Article < ActiveRecord::Base 
    has_many :assets 
    accepts_nested_attributes_for :assets 
end 

asset.rb

class Asset < ActiveRecord::Base 
    belongs_to :article 

    has_attached_file :image, 
     :styles => { 
      :thumb => '150x150#', 
      :medium => '300x300>', 
      :large => '600x600>' 
     } 
end 

полный дамп из журнала развития

Started POST "/articles" for 127.0.0.1 at 2013-08-22 18:36:46 -0500 
Processing by ArticlesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"8x5YJgZV7PsQkqxMM3nOvEZ5Zr4m7tKy8FAiQayvTrI=", "article"=>{"title"=>"Test", "content"=>"Test", "assets_attributes"=>{"0"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007fd3fbcf2bb0 @tempfile=#<Tempfile:/var/folders/ws/xtl93rn97nv1n1l61kzr9m0m0000gn/T/RackMultipart20130822-11705-evlabr>, @original_filename="PLunKmQ.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"article[assets_attributes][0][image]\"; filename=\"PLunKmQ.jpg\"\r\nContent-Type: image/jpeg\r\n">}}}, "commit"=>"Create Article"} 
Unpermitted parameters: assets_attributes 
    [1m[35m (0.1ms)[0m begin transaction 
    [1m[36mSQL (0.4ms)[0m [1mINSERT INTO "articles" ("content", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?)[0m [["content", "Test"], ["created_at", Thu, 22 Aug 2013 23:36:46 UTC +00:00], ["title", "Test"], ["updated_at", Thu, 22 Aug 2013 23:36:46 UTC +00:00]] 
    [1m[35m (0.8ms)[0m commit transaction 
Redirected to http://localhost:3000/articles/15 
Completed 302 Found in 5ms (ActiveRecord: 1.3ms) 

ответ

3

Вы должны разрешить вложенный assets_attributes с помощью параметров article, так как assets_attributes является частью параметров статьи.

Заменить:

def article_params 
    params.require(:article).permit(:title, :content) 
end 

def asset_params 
    params.require(:asset).permit(:image) 
end 

С:

def article_params 
    params.require(:article).permit(:title, :content, assets_attributes: [:image]) 
end 
1

Вам нужно добавить assets_attributes своего допускаемый Params так:

params.require(:article).permit(:title, :content, assets_attributes: [:id, :image]) 

Вы можете оставить идентификатор, но вы должны указать изображение, и он должен быть в массиве, как я приведенный выше

+0

Я хочу, чтобы я мог принять ваш ответ. Мне жаль, что это только позволяет мне выбрать один. – drewwyatt

+0

Ха, нет проблем! Я бы тоже принял другого, fwiw :) – stephenmurdoch

Смежные вопросы