rails:在创建期间尝试设置STI类型时,无法批量分配这些受保护的属性

Eng*_*epe 0 ruby ruby-on-rails single-table-inheritance

我刚刚开始学习rails和ruby,所以如果这太愚蠢了,请耐心等待.

我的应用程序中有几种不同的AppModule类型,它们具有不同的行为但数据类似,所以我使用单表继承来保存它们.

但是,当尝试允许用户明确选择他们想要的类型时,app_modules/new.html.erb我会收到警告WARNING: Can't mass-assign these protected attributes: type.这是相关代码:

<% form_for(@app_module) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :type %><br />
    <%= f.select( :type, options_from_collection_for_select(AppModule.subclasses().map{ |c| c.name}, 'to_s', 'to_s')) %>
    </p>

  <%= f.submit 'Create' %>
 <% end %>
Run Code Online (Sandbox Code Playgroud)

我已尝试attr_accessible :type在模型文件中明确设置但它不起作用

我使用的是rails 2.3.8和ruby 1.8.7.

任何帮助非常感谢,谢谢......

Ada*_*sek 6

您不必手动设置type属性.请改用您创建的子类.

model = params[:app_module].delete(:type).constantize
model = AppModule unless model.is_a?(AppModule)
@app_module = model.new(params[:app_module])
Run Code Online (Sandbox Code Playgroud)