3

Rails アプリにはユーザーがいて、アカウントに関連付けられた投稿を作成できます。"/api/:user_id/submissions/:id(.:format)" => "submissions#usersubmission" というルートがあり、ID がユーザーに関連付けられているものと一致する場合、ユーザーの投稿が正常に表示されます。

私が今やろうとしているのは、フロントエンドで AngularJS を介してユーザーの投稿を表示することです。:user_id を API 呼び出しに渡す方法がわかりません。これが私の見解です:

<div id="submission-list-container">
                <ul id="indexSubmissions">
                        <li ng-repeat="submission in userSubmissions">
                        <a href="/submissions/{{submission.id}}"><h3 id="submissionh3">{{submission.title}} <small>{{submissionPreview(submission.content)}}</small></h3></a>
                        <h1>{{submission.user.email}}</h1>
                        <a id="edit_button" href="/submissions/{{submission.id}}/edit">Edit</a>
                    </li>
                </ul>
            </div>

この呼び出しの工場は次のとおりです。

BrainDB.factory('userSubmission', function($resource) {
var service = $resource('/api/:user_id/submissions/:id', {user_id: '@user_id'}, {id: '@id'} );

return service;

});

そして、呼び出されるコントローラー アクション:

def usersubmission
    @user = User.find(params[:user_id])
    @submissions = @user.submissions 
    @submission = @submissions.find(params[:id])
    render json: @submission 

end

「BrainDB」Angular コントローラは、.query() だけが userSubmission ファクトリです。「userSubmission」ファクトリでは、:user_id に関連付けて、すべてのユーザーの投稿を JSON で正常に返す方法がわかりません。助言がありますか?

4

1 に答える 1

3

ユーザーはクライアントから送信されるべきではありません。クライアントを信頼してはいけません。

Rails アプリにはセッションが必要であり、現在のユーザーをセッションのどこかに保存する必要があります。(セッションはハッシュです。手動で行っている場合は、適切なキーを使用して現在のユーザーの ID を保存してください)。ログイン時にそれを行い、後で取得するだけです。

class ApplicationController < ActionController::Base

  attr_accessor :current_user

  before_filter :load_current_user

  # ...

  private

  def load_current_user
    self.current_user = User.find(session[:user_id])
  end

end

そしてあなたのコントローラーで:

def usersubmission
  @submissions = current_user.submissions 
  @submission = @submissions.find(params[:id])
  render json: @submission 
end

Devise などを使用している場合は、これらの種類のライブラリが既にcurrent_userコントローラーに (または同様の名前のメソッド) を挿入しているため、とにかくはるかに簡単です。

于 2013-06-24T21:21:53.340 に答える