Я новичок в рельсах и пытаюсь понять, как делать ассоциации, и если я сделал это правильно. Я читал rails guide on associations и искал в Интернете и нашел несколько ресурсов, но я просто не уверен.Simple Rails 3 Association - has_many, принадлежит_to, и has_and_belongs_to_many
Вы можете увидеть мой проект здесь: majorfinder.com В моем приложении будут специальности, школы и карьера. Я хочу иметь возможность добавлять отзывы для каждого. Поскольку я только начинаю, я только начинаю с добавления отзывов для майоров.
Вот мои ассоциации:
модели/review.rb
belongs_to :user
has_and_belongs_to_many :majors
модели/user.rb
has_many :reviews
модели/major.rb
has_and_belongs_to_many :reviews
Мои первый вопрос есть, делает это как хороший способ создать ассоциации?
Я понимаю, как сделать простую ассоциацию в контроллере Специальности:
@reviews = Review.includes(:user)
и что я могу показать отзыв мой главный контроллер:
<div class="row">
<% @reviews.each do |review| %>
<div>
<h3><%= link_to review.review,
:controller => "reviews", :action => "show", :id => review.id %></h3>
<small>Posted on <%= review.created_at %> by
<a href="#"><%= review.user.profile_name %></a></small>
</div>
<% end %>
</div>
, но я не знаю, как чтобы связать это с конкретным майором, на который я смотрю.
В моей схеме базы данных обзора есть обзор (текст), user_id (целое число) и major_id (целое число).
Последний вопрос: как я могу опубликовать обзор на главной странице просмотра контроллера с этим конкретным майне, связанным с ним?
Большое спасибо Заиду! Это так полезно! Я встречаю одну ошибку: NoMethodError в MajorsController # show undefined method 'includes 'для #, В моем файле majors_controller.rb, хотя у меня есть: def show @major = Major.find_by_slug (params [: id]). включает (: отзывы =>: пользователь) end –
lflores
Это было мое плохое, '.includes()' должно появиться перед '.find()', поэтому '@major = Major.includes (: reviews =>: user) .find_by_slug (params [: id]) 'должен работать. –
Это, спасибо! – lflores