2011-05-09 11 views
1

私はRailsの一般的なアプリケーションレイアウトについて頭を悩ませています。Rails 3 - アプリケーションのレイアウトに関する質問

基本的には、私はサッカーのためのウェブアプリを作っています。コーチはログインして、/ coach/indexページに移動します。そのページでは、JavaScriptのフロントエンドを使用して、プレイなどを描くことができます。私の問題は、プレイを保存するために、JSONをサーバーに送信し、それを正しいPlayデータベースエントリに記録する必要があるということです。

  1. レイアウトは論理的に正しいですか?とにかく、コーチがログインしてそのページに来たら、そこで演劇を描いて保存したり、新しいものを作成したり、読み込んだりするなど、プレイコントローラで管理されているページでこれを行うべきですか?

  2. 再生エンジンによって生成されたJSONをデータベースに保存します。これを行う最善の方法は何ですか?私が見ているすべてのRails AJAXチュートリアルは、リモート=> trueプロパティを設定した単純なフォームに基づいています。明示的なフォームなしでAJAX POST/GETをRails DBに作成し、入力を処理するにはどうすればよいですか?

  3. これはおそらくRailsのノウハウが不足しているからです(私は私が行くにつれて勉強しようとしています)が、あなたのより経験豊富なビューでは、正しいプレイを確実にするための最良の方法ですそれらを作ったコーチに示されていますか?私は、コントローラが他のコントローラによって制御されるものにどのようにアクセスするかを理解するのに少し苦労しています。私はこの種のことにいくつかの慣習がなければならないと確信しています。

より多くの私はそれについて考え、より多くのディレクトリを果たしている、と私は私がやりたいために、そこに作成し、そのように変更する必要がありますログインすると、/にあなたを取るべきであると私には思えますする。 ありがとうございます。

+0

私が尋ねたかったこと:データベースへの投稿に隠れたエントリを持たせるには - 誰かが新しいPlayを設定したときと同じように、明示的に言います。それはどうしたらいいのですか? – Red

答えて

0
  1. レイアウトは論理的ですか? /coachesは、ログインするコーチの宛先として意味があります。アプリケーションのユーザーがコーチだけの場合は、ルートも意味があります。コーチがログインすると、彼はcoaches#showという形式になりますが、URLが/profileなので、何か間違っているというわけではありません。 URL側の完全なRESTにすべてを遵守する必要はありません。現実の世界では、決してnewアクションはそれ自身のちっぽけなページにはありません。 /coachesページに新しいPlayフォームを入れ子にするのが理にかなっている場合は、URLに反映させる必要はありません。

コントローラはリソースとのやりとりを制御します。 /coachesページから、あなたはまだplays#destroyに削除プレイ要求を送信することがありますし、できるrender 'coaches/index' when it fails.

  1. plays#createを通じて新しい演劇を検証し、私は本当にRailsのでAJAXを扱ったことがありません。

  2. コーチだけが自分のプレーを見るようにする最も良い方法は、Coach has_many :playsの関連付けで範囲を指定することです。 DevailsのようなRails認証ソリューションの規約は、現在ログインしているユーザのUserモデルのインスタンスを返すメソッドcurrent_userを提供することです。

    # Coaches controller 
    def index 
        @plays = current_user.plays 
    end 
    

    は、その後、あなたのビューが持ち得る:

あなたcoaches#indexアクションは、次のようになり

# views/coaches/index.erb 
<ul> 
<% for play in @plays %> 
    <li><%= play.name %></li> 
<% end %> 
</ul> 

あなたはしないだろう何を:@plays = Play.where(:user_id => @user.id)

他のアクションも簡素化して保護します。考えてみましょう:

@play = current_user.plays.new 

@play = current_user.plays.build(:name => "My First Play") 
redirect_to @play, :notice => "Success!" if @play.save 

current_user.plays.find(params[:id]).destroy 

をコメントとして追加し、あなたの質問に答えるために:

# Coaches controller 
def new 
    @play = current_user.plays.new 
end 

def create 
    @play = current_user.plays.build(params[:play]) # @play now already contains the association to the coach that created it. 
    if @play.save! 
    redirect_to # somewhere 
    else 
    render 'coaches/index' 
    end 
end 
  • あなたがそれらに精通していない場合、私は非常にRailscastsをお勧めします。あなたがすぐに実装しようとしていない話題のエピソードを見ても、あなたに良い露出を与えるでしょう。
  • たとえば、Railscast on Deviseです。また、DeviseはGithubについてまともな文書を持っています。
  • 私は最近Rals Best PracticesでCodeSchoolのcouseを買った。たとえそれがあなたの直ちに理解できないものであっても、いつでも再訪できるリソースです。より良い方法を探すため、いつも一緒に来たスライドを調べます。
+0

ありがとう、@Dobry、それはすばらしい答えでした。考えて良いことがたくさんあり、リンクに感謝します。私はRails for Zombie'sに精通していますが、より高度なチュートリアルが用意されていることはわかりませんでした。 – Red

関連する問題