Взаимосвязь моделей Ruby on Rails - PullRequest
0 голосов
/ 20 октября 2011

нужен совет. Я делаю проект на RoR, и не уверен, какие отношения между моделями я должен использовать. У меня есть три модели - пользователи, доски и сообщения. Начало довольно простое: У пользователя есть одна стена, и она принадлежит пользователю, поэтому я думаю, это должно быть:

class User < ActiveRecord::Base
  has_one :board
end

class Board < ActiveRecord::Base
    belongs_to :user
end

Последняя модель - «Сообщения», и тут возникает моя проблема. Сообщение принадлежит пользователю, потому что он пишет, но оно также принадлежит стене, потому что он пишет его на стене (и это может быть стена, принадлежащая другому пользователю).

Я использовал простое решение:

class Theme < ActiveRecord::Base
    belongs_to :board
    belongs_to :user
end

class User < ActiveRecord::Base
      has_one :board
      has_many :themes
end

class Board < ActiveRecord::Base
      belongs_to :user
      has_many :themes
end

Но меня это не устраивает, и я чувствую, что оно не идеально. Я ищу решение, которое позволит мне написать, думает, как:

user.themes.create(:board => @board)

(теперь он не заполняет поле user_id)

Надеюсь, это не сложная задача для тех, кто более опытен, чем я, в модели Ruby on Rails. Буду признателен за хорошие советы, спасибо.

1 Ответ

0 голосов
/ 20 октября 2011

Для нормального использования вы используете какой-нибудь жетон аутентификации, такой как devise.Затем у вас есть переменная current_user, которая включает в себя объект пользователя, который в данный момент вызывает действие.

Затем, когда пользователь создает раздел, вы добавляете одну простую строку в контроллер для установки пользователя:

@theme.user = current_user

Вы также должны использовать драгоценный камень, такой как канкан, для управления авторизацией в центральном файле.Здесь вы найдете Railscast:

http://railscasts.com/episodes/192-authorization-with-cancan

...