2015-06-07 4 views
2

Я пытаюсь сделать параметр профиля редактирования для своего пользователя. Один из параметров, которые я передаю в форму «: name», не будет работать - где я могу определить: имя, чтобы моя форма могла взять его и обновить пользователя? "NoMethodError в/пользователей/3/редактировать неопределенный метод` имя»для #"Неопределенная ошибка метода для формы профиля профиля? (Ruby on Rails)

Мои пользователи Контроллер:

class UsersController < ApplicationController 
    skip_before_filter :require_login, only: [:new, :create] 
    def new 
    @user = User.new 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to root_url, :notice => "Signed up!" 
    else 
     render :new 
    end 
    end 

    def show 
    @user = User.find(params[:id]) 

    if current_user 
     @comment = @user.comments.build 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation, :handle, :avatar) 
    end 
end 

пользователя Модель:

class User < ActiveRecord::Base 
    authenticates_with_sorcery! 



    validates :email, :handle, :name, uniqueness: true, presence: true 
    validates :password, confirmation: true 
    validates :password_confirmation, presence: true 
    has_many :game_players, foreign_key: :player_id 
    has_many :games, through: :game_players 
    has_many :comments 

    has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100#" }, :default_url => "/images/:style/missing.png" 
    validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ 

    def total_wins 
    self.games.where.not(winner_id: nil).where(winner_id: self.id).count 
    end 

    def total_games 
    self.games.where.not(winner_id: nil).count 
    end 

    def total_losses 
    total_games - total_wins 
    end 

    def win_rate 
    total_games != 0 ? total_wins/total_games.to_f : 0 
    end 
end 

Форма:

= form_for @user do |f| 
    .field 
    = f.label :name 
    = f.text_field :name 
    .field 
    = f.label :email 
    = f.text_field :email 
    .field 
    = f.label :gender 
    = f.password_field :gender 
    .field 
    = f.label :location 
    = f.password_field :location 
    .field 
    = f.label :bio 
    %br/ 
    = f.password_field :bio 
    = f.file_field :avatar 
    %br/ 
    = f.submit "Update" 

Обратите внимание: у меня нет отдельной модели/контроллера профиля - я я используя пользовательское/редактируемое представление под моделью пользователя.

Я попытался добавить: имя к схеме, и это не сработало. Как вы можете видеть, я новичок в этом, и ваша помощь будет очень признательна! Спасибо!

+2

У вас есть поле 'name' в вашей таблице базы данных' users'? – twonegatives

+0

в схеме? Я поставил t.string «имя» и все равно не работает. У меня нет редактирования/создания миграции пользователя, я использовал колдовство. Должен ли я добавить: имя в файл колдовства или что-то еще? – icecreamrabbit

ответ

0

Ваша пользовательская схема должна иметь атрибут имени, как и у вас, для электронной почты, аватара и т. Д. Удалите консоль rails и запустите User.new и убедитесь, что это один из атрибутов. Затем в вашем User-контроллере добавьте имя как разрешенные параметры.

def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation, :handle, :avatar, :name) 
end 

Примечание Я включил: имя в качестве одного из разрешенных Params

+0

Вы правы, его нет - как вручную добавить имя через консоль? (извините за то, что вы боитесь nooby) спасибо большое !!!!!!! – icecreamrabbit

+0

Вы не можете добавить атрибут имени для пользователя из консоли. Если у Пользователя есть атрибут имени, вы можете изменить VALUE атрибута с консоли.следуйте двухместным рекомендациям, чтобы добавить атрибут имени в свою таблицу пользователей. –

2

Я попытался добавить: имя к схеме, и это не сработало.

Просто, чтобы сделать вещи ясно: вы должны никогда изменить schema.rb файл вручную, так как она содержит только обзор базовой структуры базы данных, но не имеет никакого влияния на нее. Если вы хотите изменить структуру базы данных, вы должны использовать миграцию (внимательно прочитайте this).

Как вы уже упоминали вы использовали Sorcery камень, так что проблема теперь кажется вполне очевидным: его генератор определяет только email, password и salt атрибуты (как я вижу из here).

Теперь вам нужно создать миграцию рельсов, чтобы добавить все остальные обязательные поля в вашу модель User вручную. К счастью Rails есть встроенный метод, чтобы сделать этот вид вещи:

rails g migration AddNameToUser name:string 

Отработка это в оболочке создаст файл переноса. Запустив его с помощью rake db:migrate, вы добавите name в поле модели User (и обновите schema.rb для вас).

+0

Спасибо! КОРОЛЬ – icecreamrabbit

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