레일을 처음 사용하기 때문에 추한 코드에주의하십시오. 나는이 게임의 각 단계에서레일 has_many : through 테이블은 저장되지 않습니다.
(등, 승리, 죽음, 현재 단계)이 모델은
class User < ActiveRecord::Base
has_many :games_playeds
has_many :games, :through => :games_playeds
end
class Game < ActiveRecord::Base
has_many :games_playeds
has_many :users, :through => :games_playeds
end
class GamesPlayed < ActiveRecord::Base
validates_presence_of :user_id, :game_id
belongs_to :user
belongs_to :game
end
게임 사용자가 게임에 행동하는 방법 GamesPlayed는 설명 사용자의 독립적 인 게임을 설명 가지고있는 사용자는 몇 가지 선택 중에서 선택할 수 있으며, 일부는 나중 단계로 넘어갈 것이고, 어떤 것은 그를 뒤로 가게 할 것입니다. 요점은 선택이 한 단계에서 이루어지면 다른 것을 선택할 수 없다는 것입니다. 이 구현하려면 "0 : 1, 1 : 6, 6 : 2"등의 이전 선택을 인코딩하는 steps 특성이 있습니다. GamesPlayed 모델의이 속성입니다.
사용자가 탐색하는 페이지는 자동으로 생성되므로 이름은 모르지만 XX_to_YY라고합니다.
#get the game name, we have several games
game = Game.find_by_name (params[:game])
#get the previous and current stage
from, to = params[:page].to_s.split("_to_")
to = to.split(".html")[0]
played = current_user.games_playeds.find_by_game_id (game.id)
steps = []
played.steps.split(";").each {|a| steps << a.split(":").first}
if steps.include? from
render :inline => "You already chose for this, go back"
else
played.steps << "#{from}:#{to};"
played.save
# pl = current_user.games_playeds.find_by_game_id (game.id)
# raise pl.steps
render "games/choosePath/#{game.name}/#{params[:page]}.html"
end
나는 그것이 끔찍한 코드를 추측 :이처럼 추한 뭔가를 그들 모두를 얻을 할 것입니다 내 컨트롤러의 방법이있다. Ruby를 처음 사용합니다. P
이제 질문 : plays.save에서 오류를 제공하지 않습니다.
# pl = current_user.games_playeds.find_by_game_id (game.id)
# raise pl.steps
올바른 데이터를 "인쇄"하지만 데이터베이스에 저장되지 않습니다! 나는 그것을 시각적으로 검사하기 위해 sqlitebrowser를 사용하고 그것이 저장되지 않았을 것이라고 확신한다.
BTW, 두 번째 질문으로, 누군가가 그 위의 못생긴 코드 없이도 연관 객체에 접근하는 방법을 알고 있다면 매우 감사합니다.
3 및 제 마지막 질문
:단계 = [] played.steps.split (",") 각각 {| A |. BB, CC :. 이것은 또한 끔찍하지만 더 나은 (AA '에서 AA와 BB를 얻을 할 수 있도록하는 방법을 모른다 첫째}
: < < a.split를 ("") 단계 DD; . "AA와 BB 무엇을 나도 몰라,이 숫자 나 단어가 될 수
저장 해봤습니다!하지만 아무런 예외도 발생하지 않습니다. – Jordi
그리고 저장은 "true"를 반환합니다. – Jordi
'played.steps << "# {from} : # {to};"''plays.steps = played.steps + "# {from} : # {to}; "그냥 차이가 있는지 확인하십시오. 또한 레일 콘솔에서이 작업을 다시 시도해 저장이 발생하지 않는 이유에 대해 더 많은 정보를 얻을 수 있는지 확인할 수 있습니다. –