私は最近プロジェクトで ActiveAdmin を使い始めました。ほとんどすべてがうまく機能しますが、それを Friendly_id gem と組み合わせて使用すると問題が発生します。ID が readonly である Friendly_id 属性が原因で、フォームに ActiveRecord::ReadOnlyRecord がスローされます [私は信じています]。
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"Rc5PmUYZt3BiLvfPQr8iCPPXlbfgjoe/n+NhCwXazNs=",
"space"=>{"name"=>"The Kosmonaut",
"address"=>"8 Sichovykh Striltsiv 24",
"email"=>"info@somedomain.com"},
"commit"=>"Update Space",
"id"=>"the-kosmonaut"} <--- culprit
読み取り専用属性であるため、最後の行が原因であると推測しています。これは私のフォームではなく、PATH にあります。
http://localhost:5000/manage/spaces/the-kosmonaut/edit
ID を更新しようとして、これを修正するにはどうすればよいですか?
ActiveAdmin のフォームは次のようになります。
form do |f|
f.inputs "Details" do
f.input :name
f.input :address
f.input :email
f.input :phone
f.input :website
end
f.inputs "Content" do
f.input :description
f.input :blurb
end
f.buttons
end
更新:これも機能しないため、Friendly_id ではありませんか?
@watsonの提案を使用してみましたが、うまくいくはずでしたが、それでも同じエラーが発生しました;-(
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"Rc5PmUYZt3BiLvfPQr8iCPPXlbfgjoe/n+NhCwXazNs=",
"space"=>{"name"=>"The Kosmonaut 23"},
"commit"=>"Update Space",
"id"=>"6933"}
http://localhost:5000/manage/spaces/6933/edit
コンソールで record.readonly を使用してレコードを確認すると? それはfalseを返します
更新更新: scope_to を削除すると、問題が修正されます。
scope_to :current_user, :unless => proc{ current_user.admin? }
唯一の問題は、ユーザーが所有していないレコードを表示できないようにするために scope_to が必要なことです。私の推測では (scope_to は通常 has_many で動作すると仮定しているため)、私の HABTM 関連付けは何らかの奇妙さを引き起こしているのでしょうか? つまり、ユーザー <-- HABTM --> スペース?