2015-09-21 3 views
0

Я хочу обновить модель пользователя новыми таблицами, следующие таблицы. Мне нужен пользователь, чтобы иметь возможность выбрать место при регистрации. Мне также нужны пользователи, чтобы иметь возможность выбирать до 3-х жанров музыки, которые они предпочитают слушать при регистрации.Не можете понять, как обновить модель новыми таблицами?

Теперь проблема заключается в том, что я хочу, чтобы пользователи выбирали какой жанр им нравится, я также хочу, чтобы они могли нажимать на ссылку жанра, чтобы увидеть, что другие пользователи на сайте также пользуются этим типом жанра. Значит, это означает, что жанр должен быть моделью, а местоположение должно быть таблицей?

Это то, что у меня в user.rb,

class User < ActiveRecord::Base 
    has_secure_password 
    before_save { self.email = email.downcase } 
    validates :first_name, :last_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 } 
    validates :first_name, :last_name, presence: true, uniqueness: true 
    validates_inclusion_of :age, in: 10..100 
    validates :password, presence: true, length: { minimum: 4 }, allow_nil: true 
    has_many :posts 
    has_attached_file :profile_picture, :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
    :default_url => "app/assets/images/missing.png", 
    :path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:filename" 
    validates_attachment_content_type :profile_picture, :content_type => /\Aimage\/.*\Z/ 
    def self.search(query) 
     where("email like ?", "%#{query}%") 
    end 
end 

Если вы, ребята, нужен любой другой код, просто дайте мне знать, и заранее спасибо!

+0

Я думаю, вы должны взять время, чтобы проанализировать, что, собственно, представляет собой [модель] (http://guides.rubyonrails.org/active_record_basics.html) в Рубине на Rails. * Каждая таблица базы данных представлена ​​файлом модели, что означает, что у вас есть таблица пользователей и модель User.rb, а также таблицы для местоположения и жанра с соответствующими файлами модели. У вас, похоже, есть очень фундаментальное непонимание инструментов, которые Rails предоставляет вам, поэтому может быть хорошей идеей пересмотреть основы, прежде чем продолжить свой проект. – MarsAtomic

+0

@MarsAtomic, вы предложили бы решение? – vee

ответ

0

Если вы хотите обратиться за помощью, то, что вы можете сделать, это очистить расстояние и отступы. Группируйте все ваши проверки вместе и т. Д.

Что касается того, как вы хотите настроить свой вход в систему, похоже, что вы строите свои собственные. Не стесняйтесь публиковать все файлы, связанные с вашей подписью, но было бы намного проще использовать приложение и настроить его виды (click for tutorial). Вы можете добавить своих пользователей в свои настройки &.

Перед тем, как идти дальше, давайте перейдем к одной странице для определений. Я думаю, вы имеете в виду столбцы вместо таблиц в своем вопросе выше, но дайте мне знать, если я вас неправильно понял.

Перемещение: у вас есть несколько способов, которыми вы можете настроить свои жанры. Я бы рекомендовал создать новую таблицу жанра (не столбец) и связать ее с вашими пользователями через таблицу «через» (click for solution). Я знаю, что эта ссылка устарела, но она установит вас в правильном направлении. Это может быть много для вас, особенно если вы еще не делали ассоциации раньше, но попробуйте.

Если все остальное не удается, вы можете уменьшить количество функций, чтобы начать работу, и спросите своих пользователей, хотят ли они эту функцию. Удачи!

0

Вам лучше сделать новую жанровую модель с жанрами в виде таблицы. Когда пользователь хочет выбрать свое местоположение, вы можете добавить has_one, когда пользователь выбирает только одно местоположение.

genre.rb

атрибуты: идентификатор, имя, ОПИСАНИЕ

class Genre < ActiveRecord::Base 
    has_many: genres_users 
    has_many: users, through: genres_users 
end 

genres_user.rb

атрибуты: Идентификация, user_id, genre_id

class GenresUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :genre 
end 

user.rb

атрибуты: ваше поле атрибута

class User < ActiveRecord::Base 
    has_many: genres_users 
    has_many: genres, through: genres_users 
    has_one: location 
end 

место.Р.Б.

class Location < ActiveRecord::Base 
    belongs_to :user 
end 

Для деталей generating migration and association basics

0

Я хочу обновить пользовательский модель с новыми таблицами

enter image description here

Как уже упоминалось в других ответах, каждая модель должна представляют собой единую таблицу.

Это не всегда так; STI models не будет иметь таблиц, и вы можете использовать модель, как и класс (без интеграции БД).

Однако дело в том, что вы не можете просто «добавить» таблицы к модели. Вы можете добавить ассоциации, что совершенно другое понятие. Я объясню это здесь:


ORM

Чтобы лучше понять, что вы просите, это поможет, зная, что Rails является abstraction layer для relational database программного обеспечения & веб-сервера. Это означает, что когда вы работаете с данными, вы не вытаскиваете из базы данных, а имеете дело с объектами , которые могут быть заполнены различными способами.

Rails является MVC (M Одел V IEW C ontroller) основа:

enter image description here

Это означает, что ваши "данные" не привязаны к столам и т.д., это обязательно модели, которые предназначены для предоставления вам объектов, которые вы можете использовать в своей бизнес-логике .

Другими словами, вы не должны думать о вашем приложении Rails как способ получить доступ данные, но манипулировать объекты.

Это делается с помощью ORM под названием ActiveRecord. ActiveRecord - это то, что отвечает за то, что вы вызываете User.find, и находится за Rails ActiveRecord associations.

То, что вы на самом деле спрашиваете «Как добавить ассоциации моей User модели?»

-

Мне нужно, чтобы пользователь мог выбрать место при регистрации.

Мне также нужны пользователи, чтобы иметь возможность выбирать до 3 жанров музыки, которые они предпочитают слушать во время регистрации.

Вот что я хотел бы сделать:

#app/models/user.rb 
class User < ActiveRecord::Base 
    # columns id | user | etc | location_id | created_at | updated_at 
    belongs_to :location 
    has_and_belongs_to_many :genres 
end 

#app/models/location.rb 
class Location < ActiveRecord::Base 
    # columns id | etc | etc | created_at | updated_at 
    has_many :users 
end 

#app/models/genre.rb 
class Genre < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

Теперь есть еще один ответ, который упоминает, имеющий модель под названием genre_user.rb. Это для has_many :through, и я не считаю, что это применимо в этом случае.

Я бы рекомендовал использовать has_and_belongs_to_many таблицу соединения, а просто проверить количество genres до 3 (я дам вам работу, что из):

enter image description here

Чтобы сделать это, вам нужно таблицу genres_users с атрибутами genre_id и user_id. Это даст вам возможность вызова:

$ @user = User.find 1 
$ @user.genres #-> 1,2,6 
Смежные вопросы