我用了两种表格。一个用于sign_up,使用devise身份验证,另一个用于添加用户注释。我注意到,当我完成注册过程时,我为名字和姓氏添加的字段在db中以0结尾。我找到了一个解决办法,解决了这个问题:
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但在我的第二种形式中,我向表中添加了一个user_id列,并将其放在attr_accessible中。然而,它却以零的形式出现。我对rails非常陌生,我不确定这是一个类似于第一种形式的问题,还是完全不同的问题。
我在网上找到的所有其他解决方案似乎都指向了attr_accessible,但我认为我在那里很棒。那肯定是别的什么了。我还应该在哪里查找疑难解答呢?还有其他人经历过吗?
编辑:
第二种形式是供用户评论。看起来是这样的:
<%= 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为零。我最初在表中没有这个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的约定是什么。我最好摆脱它吗?如果是这样的话,我应该做些什么来保护某些输入吗?
发布于 2013-11-09 22:01:44
经过一些研究后,我发现Rails 4使用强参数gem处理大量分配,这会将用户输入转移到控制器。而不是使用
attr_accessible :first_name, :last_name在模型中,您可以在应用程序控制器中使用以下内容来处理这个问题
def user_params
params.require(:user).permit(:first_name, :last_name)
end发布于 2013-11-08 22:38:54
如果在Rails 4中使用protected_attributes,则可能需要禁用强参数。在config/application.rb中:
config.action_controller.permit_all_parameters = true然后重新启动服务器。
https://stackoverflow.com/questions/19869543
复制相似问题