В моем проекте есть пользователи и квесты. Один пользователь может присоединиться к нескольким квестам, а один квест может иметь несколько пользователей.
Поэтому я создал таблицу под названием квест, в которой есть user_id и quest_id.
В моем user.rb я сделал следующее:
require 'digest/sha1'
class User < ActiveRecord::Base
has_many :questings
has_many :quests ,:through =>:questings
...
My Quest.rb:
class Quest < ActiveRecord::Base
has_many :questings
has_many :users ,:through =>:questings
...
My Questing.rb:
class Questing < ActiveRecord::Base
belongs_to :quest
belongs_to :user
end
Теперь я хочу создать ссылку или кнопку на моем /quests/show.html.erb, вызывая действие в моем контроллере, которое создаст связь между пользователем и квестом.
Итак, в моем quest_controller я сделал:
def join_quest
@quest = Quest.find(params[:id])
puts '************************'
puts 'join quest:' + @quest.id
puts '************************'
respond_to do |format|
format.html { redirect_to(@quest) }
format.xml { head :ok }
end
end
и в моем show.html.erb я сделал:
<%= link_to 'join this quest!!!', :action => :join_quest %>
Теперь нажатие на эту ссылку вызовет ошибку, такую как: Couldn't find Quest with ID=join_quest
, а URL указывает на / квесты / join_quest вместо / квестов / 1 / join_quest
Теперь мои вопросы:
Мой квест-контроллер - подходящее место для моего действия join_quest или я должен переместить его в свой users_controller?
Почему я получаю эту ошибку? Как это решить?
Что я должен написать в своем действии join_quest для сохранения отношений?
На моем /users/show.html.erb я хочу вывести все квесты, к которым присоединился пользователь. Как это сделать? Я должен получить все эти квесты из моей таблицы отношений, верно? Как?
Надеюсь, вы мне поможете! THX!
EDIT:
При добавлении :member=>{:join_quest=>:get}
в мой route.rb (map.resources :quests, :member=>{:join_quest=>:get}
) он будет вызывать / квесты / 1 / join_quest и правильно называть мои действия.
Но я все еще не могу понять, что написать в моем действии для сохранения соединения.