Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4表单以零提交数据_Ruby On Rails_Ruby_Forms_Devise_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails 4表单以零提交数据

Ruby on rails Rails 4表单以零提交数据,ruby-on-rails,ruby,forms,devise,ruby-on-rails-4,Ruby On Rails,Ruby,Forms,Devise,Ruby On Rails 4,我用了两种形式。一个用于注册,使用Desive进行身份验证,第二个用于添加用户评论。我注意到,当我完成注册过程时,我为名字和姓氏添加的字段在数据库中以零结尾。我找到了解决问题的方法: before_filter :configure_devise_params, if: :devise_controller? def configure_devise_params devise_parameter_sanitizer.for(:sign_up) do |u| u.perm

我用了两种形式。一个用于注册,使用Desive进行身份验证,第二个用于添加用户评论。我注意到,当我完成注册过程时,我为名字和姓氏添加的字段在数据库中以零结尾。我找到了解决问题的方法:

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\u id列,并将其放入attr\u 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 %>

正在保存内容,但用户id为零。我最初在表中没有用户id-我后来在迁移中添加了:

class AddUserIdToStatuses < ActiveRecord::Migration
  def change
    add_column :statuses, :user_id, :integer
    add_index :statuses, :user_id
    remove_column :statuses, :name
  end
end
类addUserIDToStatus
另外,我知道attr_accessible是Rails 3的一个特性,在Rails 4中已经被取消了。我将gem“protected_attributes”添加到我的gem文件中,这样我就可以使用它了,因为我不知道rails4的约定是什么。我把它处理掉会更好吗?如果是这样,我是否应该做些什么来代替它来保护某些输入?

如果您在Rails 4中使用受保护的属性,您可能需要禁用强参数。 在config/application.rb中:

config.action_controller.permit_all_parameters = true

然后重新启动服务器

经过一番研究,我发现Rails 4使用强参数gem处理批量分配,它将用户输入移动到控制器。而不是使用

attr_accessible :first_name, :last_name
在模型中,您可以在应用程序控制器中通过以下方式处理此问题

def user_params
    params.require(:user).permit(:first_name, :last_name)
end