2016-11-09 6 views
0

Я получаю ошибку имени nometod во время регистрации пользователя. Однако в моей таблице пользователей в базе данных нет столбца имен, и в форме нет поля имени, поэтому я не понимаю, почему эта ошибка возникает. Вот ошибка, а затем моя форма, контроллер и схема. noMethodError in Users#Create (wtf?)Rails Ошибка 5 'nomethod' во время регистрации

<%= form_for(user) do |f| %> 
    <% if user.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2> 
     <ul> 
     <% user.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :first_name %> 
    <%= f.text_field :first_name %> 
    </div> 

    <div class="field"> 
    <%= f.label :last_name %> 
    <%= f.text_field :last_name %> 
    </div> 

    <div class="field"> 
    <%= f.label :email %> 
    <%= f.email_field :email %> 
    </div> 

    <div class="field"> 
    <%= f.label :display_name %> 
    <%= f.text_field :display_name %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

и вот мои контроллеры пользователей. Ошибка возникает из пользовательского контроллера, создающего действие.

def create 
    @user = User.new(user_params) 

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

И, конечно, я думал, что это была схема БД, но это не так. Вот схема.

ActiveRecord::Schema.define(version: 20161109225217) do 

    create_table "users", force: :cascade do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.string "email" 
    t.string "display_name" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "password_digest" 
    end 

end 

Я понятия не имею, что вызывает эту ошибку. Любые предложения, пожалуйста !?

class User < ApplicationRecord 
    attr_accessor :password 
    before_save { self.email = email.downcase } 
    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
         format: { with: VALID_EMAIL_REGEX }, 
         uniqueness: { case_sensitive: false } 
    has_secure_password 
    validates :password, presence: true, length: { minimum: 6 } 
    end 

И мой PARAMS пользователь -

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:first_name, :last_name, :email, :display_name, :password, :password_confirmation) 
    end 
end 
+0

Пожалуйста, добавьте 'user_params' метод. – araratan

+0

А также добавьте ваш файл 'app/models/user.rb' –

+0

Это моя модель: –

ответ

0

Go и проверить вашу модель вы сделали ошибку в области валидации

ваш код

validates :name, presence: true, length: { maximum: 50 }` 

изменения нравится этот

validates :first_name, :last_name, presence: true, length: { maximum: 50 } 
+0

спасибо! ничего себе, я не мог понять, откуда «имя». Я потратил более часа на поиск моей формы, схемы и т. д., и, должно быть, не обратил на это внимания. Ошибка Rails тоже не очень полезна, но большое вам спасибо! –

+0

Ваш приветствующий @ FrederickJohn – prasanthrubyist

+0

Если вы чувствуете себя счастливым за мой ответ, можете ли вы поставить голос? – prasanthrubyist

0

Вы не должны Validate: имя вашей модели пользователя, так как вы не имеете: столбец имен в нем.

Смежные вопросы