私はレールに慣れていないので、醜いコードに注意してください。 私はレール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は、第2の質問として、誰かが非常に感謝の上にその醜いコードなしで関連オブジェクトに到達する方法を知っている場合。
第3および最後の質問:
手順= [] played.steps.split( ";")は、各{| |。 BB; CC::。これも恐ろしいですが、それが良い(AA」からAAとBBを取得したいようにする方法がわからない最初}
:< < a.splitを( "")、ステップDD。 「私はAAとBBが何であるかを知らない、それは数字や単語ことができ
保存しました。しかし、例外は発生しません。 – Jordi
そして保存は "true"を返す – Jordi
'played.steps <<"#を{from}に変更してみてください:#{to}; "' 'playing.steps = played.steps +"#{from} :#{to}; "それが違いを生むかどうかを確認するだけです。また、レールコンソールでこれを作り直して、セーブが起こっていない理由をもっと知ることもできます。 –