Rails 4表单提交数据为零

时间:2013-11-08 22:19:10

标签: ruby-on-rails ruby forms devise ruby-on-rails-4

我正在使用两种形式。一个用于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.我最好摆脱这个吗?如果是这样,我应该做些什么而不是保护某些输入?

2 个答案:

答案 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