0

私は自分の Rails アプリケーションで長い道のりを歩んできました。95% 完了しています。最後に、特定のユーザーに送信するトークンを生成して、特定の投稿を特定のユーザーに制限する必要があります。アクセスを制限する方法が他にもあることは知っていますが (あまり詳しく説明する必要はありません)、このアプリケーションではトークンを使用する必要があります。

post#token_stringルーティング設定をこれではなく、このようにするにはどうすればよいpost#idですか?

restrict_access詳細情報:投稿コントローラーの「プライベート」メソッドに既にあります。1 つの投稿に多くの link_tokens があるため、私の投稿モデルhas_many link_tokensと link_tokens モデルbelongs_to post

どんな軽い小屋でもいただければ幸いです。よろしくお願いします(このアプリケーションを完成させるのが待ちきれません)

今、私はこのようlink_to post.name, post_url + "?token=" + @token.tokenに結果を出していますhttp://localhost:3000/post/1?token=25b8af

find_by_token( http://localhost:3000/post/25b8af)使用時のエラーメッセージ

def show
     **@post = LinkToken.find_by_token(params[:token]).post**
     @posts = Post.order("created_at DESC")
end
4

3 に答える 3

4

paramリソースでパラメーターを渡すことができます。

resources user, param: :token

これらのルートにつながる

   Prefix Verb   URI Pattern                  Controller#Action
    users GET    /users(.:format)             users#index
          POST   /users(.:format)             users#create
 new_user GET    /users/new(.:format)         users#new
edit_user GET    /users/:token/edit(.:format) users#edit
     user GET    /users/:token(.:format)      users#show
          PATCH  /users/:token(.:format)      users#update
          PUT    /users/:token(.:format)      users#update
          DELETE /users/:token(.:format)      users#destroy
     root GET    /                            application#index
于 2015-08-10T10:03:45.700 に答える
1

私が考えることができる唯一の方法は、代わりにカスタムルートを使用することですresources:

match 'posts' => 'posts#index', :via => :get
match 'posts' => 'posts#create', :via => :post
match 'posts/:token' => 'posts#show', :via => :get
match 'posts/:token' => 'posts#update', :via => :put
match 'posts/:token' => 'posts#destroy', :via => :delete
match 'posts/:token/new' => 'posts#new', :via => :get
match 'posts/:token/edit' => 'posts#edit', :via => :get

次にPostsController、id ではなくトークンで投稿を検索するように調整します。

def show
  @post = LinkToken.find_by_token(params[:token]).post
end
于 2013-06-03T20:04:18.883 に答える