2017-07-15 12 views
1

私は小さなRails 5アプリケーションにボードがあり、各ボードにはポスト(Redditのようなもの)があります。RailsのネストされたリソースIDは親とは関係ありません

ボードモデル:

class Board < ApplicationRecord 
    has_many :posts 
end 

Postモデル:

class Post < ApplicationRecord 
    belongs_to :board 
    validates :title, presence: true, length: { minimum: 1, maximum: 64} 
    mount_uploader :image, ImageUploader 
end 

私はボードのリソースの下のポスト資源を入れ子にしています。

routes.rbを:

Rails.application.routes.draw do 
    resources :boards, param: :name, path: '/' do 
    resources :posts, path: '/', except: [:index] 
    end 
end 

レール路線:

  Prefix Verb URI Pattern      Controller#Action 
    board_posts POST /:board_name(.:format)   posts#create 
new_board_post GET /:board_name/new(.:format)  posts#new 
edit_board_post GET /:board_name/:id/edit(.:format) posts#edit 
    board_post GET /:board_name/:id(.:format)  posts#show 
       PATCH /:board_name/:id(.:format)  posts#update 
       PUT /:board_name/:id(.:format)  posts#update 
       DELETE /:board_name/:id(.:format)  posts#destroy 
     boards GET /        boards#index 
       POST /        boards#create 
     new_board GET /new(.:format)     boards#new 
    edit_board GET /:name/edit(.:format)   boards#edit 
      board GET /:name(.:format)    boards#show 
       PATCH /:name(.:format)    boards#update 
       PUT /:name(.:format)    boards#update 
       DELETE /:name(.:format)    boards#destroy 

私が持っている問題は、それが上の投稿の取締役会に対する、ポストIDが世界的に増加されるということではありません。例:

私は空のボードが2枚あるとします。「ニュース」ボードと「政治」ボードです。私はニュースボードの投稿を作成し、ルートを取得します: http://localhost:3000/news/1。これは私が期待していることですポストIDは1でなければならないので、私の問題は、他のボードにポストを投稿すると、ポストはhttp://localhost:3000/politics/2のようにID 2を取得するということです。私はそれがhttp://localhost:3000/politics/1であることを望んでいます。なぜなら、それはそのボードに関連する最初の投稿です。

これをどのようにしてIDを親ボードに関連付けることができますか?

答えて

0

ヒント:これを行わないでください。これは非常にエラーが発生しやすいです。

しかし、あなたが本当にこれを必要とする場合は、このようなコードを使用することができます:

Board.find_by(name: params[:board_name]).posts.first(id).last 

をお使いのボードが百万枚のポストパフォーマンスの缶を持っているので、もしそれが、メモリに与えられたボードに関連付けられているすべての記事をロードしますのでご注意下さい問題である。

関連する問題