我正在使用两种形式。一个用于sign_up,使用devise进行身份验证,第二个用于添加用户注释。我注意到,当我进行注册过程时,我为名字和姓氏添加的字段在数据库中以nil结尾。我找到了解决这个问题的解决方案:
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'en protected_attributes'以便我可以使用它,因为我不知道约定是什么对于Rails 4.我最好摆脱这个吗?如果是这样,我应该做些什么而不是保护某些输入?
答案 0 :(得分:0)
如果在Rails 4中使用protected_attributes,则可能需要禁用强参数。 在config / application.rb中:
config.action_controller.permit_all_parameters = true
然后重启服务器
答案 1 :(得分:0)
经过一番研究后,我发现Rails 4使用Strong Parameters gem处理质量分配,它将用户输入移动到控制器。而不是使用
attr_accessible :first_name, :last_name
在模型中,您将在应用程序控制器中使用类似
的方法处理此问题def user_params
params.require(:user).permit(:first_name, :last_name)
end