0

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 %>

モデルファイルで明示的に設定しようとattr_accessible :typeしましたが、機能しませんでした

レール2.3.8とルビー1.8.7を使用しています。

どんな助けでも大歓迎です、ありがとう...

4

3 に答える 3

6

type 属性を手動で設定する必要はありません。代わりに、作成したサブクラスを使用してください。

model = params[:app_module].delete(:type).constantize
model = AppModule unless model.is_a?(AppModule)
@app_module = model.new(params[:app_module])
于 2010-11-16T23:13:24.073 に答える
1

これを基本クラスに追加します。

  def attributes_protected_by_default
    super - [self.class.inheritance_column]
  end

混合リストを扱う場合を除き、Adam の方法をお勧めします。

于 2010-11-17T00:49:25.563 に答える
0

この問題を解決するには、「config/application.rb」の次の行にコメントするだけです。

# config.active_record.whitelist_attributes = true
于 2012-05-25T11:14:36.373 に答える