2013-10-17 42 views
0

我有一个表格添加密码的东西(bcrypt-红宝石)前登记在我的应用程序的客户,是工作的罚款。现在客户不会在提交表单时创建,但如果我通过控制台使用完全相同的值创建它,它就可以正常工作。我没有得到任何错误信息,只是一个事务回滚(以及唯一奇怪的是不允许的参数:密码,password_confirmation但IDK的,如果它很重要)。我使用的是protected_attributes gem,而不是现在的标准strong_params。 为什么在控制台上工作,而不是通过POST?一定有什么用bcrypt或者我失去了一些东西真的很傻,但我找不到我的研究任何答案。请帮助:■创作中的控制台,但没有在网站上工作 - Ruby on Rails的

型号:

attr_accessible :name, :surname, :email, :phone, :address, :password, password_confirmation 

has_secure_password 

控制器创建行动:

def create 
    @customer = Customer.new(customer_params) 

    respond_to do |format| 
    if @customer.save 
    format.html { redirect_to @customer, notice: 'Customer was successfully created.' } 
    format.json { render action: 'show', status: :created, location: @customer } 
    else 
    format.html { render action: 'new' } 
    format.json { render json: @customer.errors, status: :unprocessable_entity } 
    end 
end 

形式:

<%= form_for :customer, :url => '/customers#new', remote: true do |f| %> 
    <%= render '/shared/error_messages', object: f.object %> 
    <p> 
    <%= f.label(:name, "Nome") %> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label(:surname, "Sobrenome") %> 
    <%= f.text_field :surname %> 
    </p> 
    <p> 
    <%= f.label(:email, "Email") %> 
    <%= f.text_field :email %> 
    </p> 
    <p> 
    <%= f.label(:phone, "Telefone") %> 
    <%= f.text_field :phone %> 
    </p> 
    <p> 
    <%= f.label(:address, "Endereço") %> 
    <%= f.text_field :address %> 
    </p> 
    <p> 
    <%= f.label(:password, "Senha") %> 
    <%= f.password_field :password %> 
    </p> 
    <p> 
    <%= f.label(:password_confirmation, "Confirme sua senha") %> 
    <%= f.password_field :password_confirmation %> 
    </p> 
    <%= f.submit "Enviar", class: "btn btn-large btn-primary" %> 
<% end %> 

服务器输出:

Started POST "/customers" for 127.0.0.1 at 2013-10-17 19:53:15 -0300 
Processing by CustomersController#create as JS 
    Parameters: {"utf8"=>"√", "customer"=>{"name"=>"Derpina", "surname"=>"Derpson", "email"=>"[email protected]", "phone"=>"2314534", "address"=>"Derpstreet, 123", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Enviar"} 
Unpermitted parameters: password, password_confirmation 
    ←[1m←[35m (0.0ms)←[0m begin transaction 
    ←[1m←[36mCustomer Exists (0.0ms)←[0m ←[1mSELECT 1 AS one FROM "customers" WHERE LOWER("customers"."email") = LOWER('[email protected]') LIMIT 1←[0m 
    ←[1m←[35m (0.0ms)←[0m rollback transaction 
    Rendered customers/_form.html.erb (6.0ms) 
    Rendered customers/new.html.erb within layouts/application (9.0ms) 
    Rendered shared/_error_messages.html.erb (0.0ms) 
    Rendered layouts/_newCustomer.html.erb (3.0ms) 
    Rendered layouts/_newRestaurant.html.erb (1.0ms) 
    Rendered layouts/_header.html.erb (6.0ms) 
    Rendered layouts/_footer.html.erb (0.0ms) 
Completed 200 OK in 314ms (Views: 65.0ms | ActiveRecord: 1.0ms) 

回答

0

你需要在一个私有方法添加需要和允许的参数到控制器。

例如,在你的customers_controller.rb的底部:

private 
    def customer_params 
     params.require(:customer).permit(:name, :surname, :email, :phone, :address, :password, password_confirmation) 
    end 

如果你不想键入长的事情在未来,你还可以使用“砰”的版本允许所有模型上的属性。

private 
    def customer_params 
     params.require(:customer).permit! 
    end 
相关问题