2012-03-06 7 views
1

ajaxベースのレールアプリケーション用のコントローラとビューを構成するためのベストプラクティスが何であるか疑問に思っていました。ajaxベースのアプリケーション用にレール3のコントローラとビューを構成する方法

例えば、私は投稿で構成されたブログを持っていて、投稿体を動的にリフレッシュできるようにしたいのですが、これを行うためにアプリケーションをどのように構造化するのでしょうか。

技術的には、コントローラ内に動詞を使用することだけが想定されています。つまり、行動や言葉です。これは、次の操作を実行することは間違っているだろう意味:

class PostsController < ApplicationController 
    #... 
    def body 
     #return body of a particular post 
    end 
    #... 
end 

だから私の他のアイデアは、ネストされたリソースとして、それを作成することです。その後、

resources :posts do 
    resource :body, :controller = "posts/body" 
end 

とポスト/ボディサブコントローラを作成:

class Posts::BodyController < ApplicationController 
    def show 
     #return body of a particular post 
    end 
end 

このためのURLは次のようになります。

/記事/:post_idの/ボディ

私は正しいと思う。

ほかの誰かがより良いアイデアを持っていますか?

答えて

0

良い質問です。私はajaxリクエストと通常のページリクエストを処理するアプリケーションを持っており、リソースコントローラの本体にajaxアクションを置くという最初のアプローチを行った。

個人的に私はコントローラを管理しやすい状態に保つため、この方法がより好きです。ネストされたリソースとしてそれを作成するという2番目の考えで、1つのAjaxアクションを実行するだけの多くのコントローラーが必要になります。 PostsについてのすべてがPostsControllerで行われているのに対して、多くのSingle Actionサブコントローラが作成されている場合、私は高い結束力のソリューションを好むでしょう。

+0

問題は「ブログ」は実際には動詞の意味でのアクションではないため、オブジェクトに対するアクションを実行するというアイデアを壊してしまいます。 @jonniiへの私の応答を読んでください。私はGithubでかなりのコードを見てきましたし、多くのプログラマが動詞ベースのアクションの規約を破っています。しかし、私にとってちょっとしたハックのような感じがして、アドホックな場所に物事を置くつもりなら、フレームワークのポイントを打ち負かしてしまいます。 – user1243113

0

なぜ体だけが必要ですか?あなたはポスト全体を返して体を使うのはなぜですか?それが十分ではない場合

あなたはこの上記のコードでいくつかの可能性の問題があります。この

def show 
    @post = Post.find(params[:id]) 

    # set some etag stuff up so we don't have to request this again if it hasn't changed 
    response.last_modified = @post.created_at.utc 
    response.etag = @post 

    return head :not_modified unless request.fresh?(response) 
    respond_to do |wants| 
    wants.js { render :json => @post.to_json(:only => params[:select]) } 
    end 
end 

ような何かを行うことができます。第1に、find()が連鎖可能なクエリを返す場合は頭の上から覚えていません.2番目に安全のためにfieldsをサニタイズする必要があります。フィールドの白いリストだけを返すようにしてください(sliceでこれを行うことができます)。

こちらがお役に立てば幸いです。

+0

私が与えたブログの例は、レールを持った(もっと大きな)問題の簡略版です。 – user1243113

+1

大きな問題は、どのようにして同じオブジェクトを異なる角度から見ることができるかということです。たとえば、投稿のコレクションを(デフォルトで)取得した場合、「インデックス」アクションがあります。そのインデックスを検索結果として表示するか、またはチェックボックスのリストとして表示して、後で処理したい投稿を選択することができます。これらのユースケースのための明確な場所はありません。フレームワークの全体のポイントは、物を配置するための構造を提供することです。レールはモデルとコントローラの間にはあまりにも強い相関があると私は思う。 – user1243113

+0

あなたの質問は、「安らかなAPIをデザインする方法」のように聞こえます。レールにはモデルとコントローラの間に相関関係はなく、モデルなしのコントローラとコントローラなしのモデルを持つことができます。 – jonnii

関連する問題