0

追加する必要があります

attr_accessible :user

エンゲージメントジェムの投票モデルへ。

なぜこれを行う必要があるのか​​については、この質問を参照してください(答えをスキップしてください):Rails Engage!エラー(保護された属性を一括割り当てできません:ユーザー)

さて、通常はこれをgithubでフォークして行を追加しますが、githubはありません。さらに、一般に公開することなどのルールに違反している可能性があります。とにかく、ここに記載されているように、gemfileにgemを追加しています:https ://rubygems.org/gems/engagecsm

ローカルコンピューターでgemを開き、その行を入力して、engagecsmのローカルインストールにその行を追加しました。ただし、これをHerokuで機能させたいと思います。

4

2 に答える 2

1

あなたのlibフォルダにファイルを作成し(私の推奨はlib/ext/engagecms/vote.rb)、次のように配置します。

require 'engagecms' #make this the correct require for the gem, the goal is to force the gem to load before your code

class Vote < ActiveRecord::Base # you'll need to make this declaration equal the engage one
  attr_accessible :user
end

これはコードにモンキーパッチを適用しているため、アップグレードにより将来破損する可能性があります。

より良い長期戦略は、Vote.create(params[:vote])params[:vote]あなたのuser属性を持って)変換するラッパーを作成することです

user = params[:vote].delete(:user)

Vote.create(params[:vote]) do |v|
  v.user = user
end

この手法を使用すると、アクセス可能であるかのように動作できますが、破損や競合のリスクがあるため、ベストプラクティスではないモンキーパッチを回避できます。

于 2013-02-03T23:15:41.677 に答える
1

config/application.rb

# run before each request in dev, or during initialization in test & prod
config.to_prepare do
  # re-open the `Vote` class so we can make some changes
  Vote.class_exec do
    # the custom changes
    attr_accessible :user
  end
end
于 2013-02-03T23:16:35.237 に答える