0

私が使用している2つのフォームがあります。1 つは認証用のデバイスを使用するサインアップ用で、もう 1 つはユーザーのコメントを追加するためのものです。サインアップ プロセスを行ったときに、名前と姓に追加したフィールドがデータベースでゼロになっていることに気付きました。これで問題が解決する解決策を見つけました:

before_filter :configure_devise_params, if: :devise_controller?
  def configure_devise_params
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation)
    end
  end

しかし、2 番目のフォームでは、user_id 列をテーブルに追加し、attr_accessible に配置しました。ただし、nil として表示されます。私はレールに非常に慣れていないので、これが最初のフォームに似た問題なのか、それともまったく別の問題なのかわかりません。

私がオンラインで見つけた他のすべてのソリューションは attr_accessible を指しているように見えますが、私はそれでいいと思います。だから、それは別のものでなければなりません。これをトラブルシューティングするには、他にどこを見る必要がありますか? 他の誰かがこれを経験しましたか?

編集:

2 番目のフォームは、ユーザーのコメント用です。次のようになります。

<%= simple_form_for(@status, html: {class:"form-horizontal"}) do |f| %>
    <%= f.input :user_id %>
    <%= f.input :content %>

    <div class="form-actions">
      <%= f.button :submit %>
    </div>
<% end %>

コンテンツは保存されていますが、user_id は nil です。私はもともとテーブルに user_id を持っていませんでした-後で移行で追加しました:

class AddUserIdToStatuses < ActiveRecord::Migration
  def change
    add_column :statuses, :user_id, :integer
    add_index :statuses, :user_id
    remove_column :statuses, :name
  end
end

また、attr_accessible が Rails 3 の機能であり、Rails 4 で廃止されたことも知っています。Gemfile に gem 'protected_attributes' を追加して、これを使用できるようにしました。Rails 4 の規則が何であるかを知らなかったからです。 . これはやめた方がいいでしょうか? もしそうなら、特定の入力を保護するためにこれの代わりにすべきことはありますか?

4

2 に答える 2

0

Rails 4 で protected_attributes を使用している場合は、強力なパラメーターを無効にする必要がある場合があります。config/application.rb で:

config.action_controller.permit_all_parameters = true

次に、サーバーを再起動します

于 2013-11-08T22:38:54.813 に答える
0

少し調査した結果、Rails 4 は、ユーザー入力をコントローラーに移動する Strong Parameters gem を使用して大量の割り当てを処理することがわかりました。使用する代わりに

attr_accessible :first_name, :last_name

モデルでは、アプリケーションコントローラーでこれを次のように処理します

def user_params
    params.require(:user).permit(:first_name, :last_name)
end
于 2013-11-09T22:01:44.480 に答える