Ruby on Rails, form_for, скрепка и массовое назначение защищенных параметров

Я разрабатываю приложение для рельсов, которое загружает и обрабатывает изображения. Изображения вместе с другой строковой информацией отправляются через файл form_for. Я изучаю эту тему уже около 16 часов, и ни одно решение не сработало. Честно говоря, рельсы даже не читают мой код.

Одна модель процесса имеет много активов, где актив — это просто модель для хранения одного файла изображения. При создании моделей процессов я никогда не могу получить доступ к активу, всегда получая атрибуты невозможного массового назначения: assets_attributes

Completed 500 Internal Server Error in 13ms

ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: asset):
  app/controllers/process_controller.rb:20:in `new'
  app/controllers/process_controller.rb:20:in `create'

- Эта форма используется в new.html.erb

<%= semantic_form_for @processmodel, :url => { :action => 'create' }, :html => {     :multipart => true } do |f| %>
    <%= f.input :batch, :as => :string, :name => "Batch" %>
    <%= f.input :batchset, :as => :string, :name => "Batchset" %>
    <%= f.input :numSlots, :as => :number, :name => "Number of slots" %>    
    <%= f.input :key, :as => :file, :name => "Key" %>   

    <%= f.semantic_fields_for :asset do |asset| %> 
        <%= asset.input :asset, :as => :file, :label => "Image" %>
    <% end %><br />

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

-

class Processmodel < ActiveRecord::Base
  attr_accessible :user_id, :batch, 
                :batchset, :numSlots,
                :key,:assets_attributes

  attr_accessor :key_file_name

  has_many :assets, :dependent => :destroy
  belongs_to :user  
  has_attached_file :key
  #    :url => Rails.root.join('/assets/readimages/:basename.:extension'),
  #    :path => Rails.root.join('/assets/readimages/:basename.:extension'),

  accepts_nested_attributes_for :assets, :allow_destroy => true

  . 
  . 
  .

end

-

require 'RMagick'
class Asset < ActiveRecord::Base
    attr_accessible :results_string, 
        :name, 
        :ambiguous_results, 
        :image 
    belongs_to :batch_element
    belongs_to :processmodel
    has_attached_file :image 
    validates_attachment_presence :image
end

-

class ProcessController < ApplicationController
def create
    @Processmodel = Processmodel.new(params[:processmodel])
    @Processmodel.save    
    all_img = Array.new(@processmodel.assets.all)
    respond_to do |format|
      if @processmodel.beginRead(...)
        redirect_to :action => 'results_main', :controller => 'results' 
      else
        format.html { render action: "new" }
   end
end 
end

-

def new
  @processmodel = Processmodel.new
  #5.times{@processmodel.assets.build}
  respond_to do |format|
    format.html #new.html.erb
end
end

Я прошу идеи о том, как исправить это и заставить мое приложение работать.


person Conor    schedule 20.06.2012    source источник
comment
попробуйте добавить attr_accessible :key в свой класс модели активов   -  person Said Kaldybaev    schedule 21.06.2012
comment
Можете ли вы показать свой взгляд? (предположительно new.html.erb)   -  person Nick Colgan    schedule 21.06.2012
comment
Вышеизложенное не дало результата. Ключ не является частью актива.   -  person Conor    schedule 21.06.2012


Ответы (2)


Вам необходимо обновить миграцию базы данных. Бежать:

rails g migration AddIdToAsset processmodel_id:integer
rake db::migrate
person rm -rf slash    schedule 21.06.2012

Вы назвали прикрепленный файл :image здесь:

has_attached_file :image

Но вы называете это :asset в своем представлении:

<%= asset.input :asset, :as => :file, :label => "Image" %>

Чтобы исправить, просто измените эту строку на

<%= asset.input :image, :as => :file, :label => "Image" %>
person Nick Colgan    schedule 20.06.2012