首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails、form_for、回形针和大量指定受保护的参数

Ruby on Rails、form_for、回形针和大量指定受保护的参数
EN

Stack Overflow用户
提问于 2012-06-21 04:22:23
回答 2查看 1.7K关注 0票数 1

我一直在开发一个上传和处理图像的rails应用程序。图像以及其他字符串信息通过form_for提交。我已经研究这个话题大约16个小时了,还没有解决方案。老实说,这就像rails甚至不能读取我的代码。

一个Processmodel有许多资产,其中一个资产只是一个保存一个图像文件的模型。在创建流程模型时,我永远不能访问资产,总是收到无法批量分配属性: assets_attributes

代码语言:javascript
复制
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

中使用

代码语言:javascript
复制
<%= 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 %>

-

代码语言:javascript
复制
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

-

代码语言:javascript
复制
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

-

代码语言:javascript
复制
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

-

代码语言:javascript
复制
def new
  @processmodel = Processmodel.new
  #5.times{@processmodel.assets.build}
  respond_to do |format|
    format.html #new.html.erb
end
end

我要求如何解决这个问题,并让我的应用程序工作的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 10:09:55

您需要更新数据库迁移。运行:

代码语言:javascript
复制
rails g migration AddIdToAsset processmodel_id:integer
rake db::migrate
票数 0
EN

Stack Overflow用户

发布于 2012-06-21 07:22:24

您已在此处将附加文件命名为:image

代码语言:javascript
复制
has_attached_file :image

但在您的视图中,您将其称为:asset

代码语言:javascript
复制
<%= asset.input :asset, :as => :file, :label => "Image" %>

要进行修复,只需将此行更改为

代码语言:javascript
复制
<%= asset.input :image, :as => :file, :label => "Image" %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11127583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档