Wellborn pada 16 Mei 2019

Mungkin mas agung atau teman2 idrails bisa bantu.

Saya ada permasalahan seperti ini, jadi saya punya model community dan discussion
relasi ny community has many discussion

routes nya seperti

resources :communities do
resources :discussions
end

Controller nya seperti ini

class DiscussionsController < ApplicationController
  before_action :set_community, except: [:index]
  before_action :set_discussion, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!

  # GET /discussions
  # GET /discussions.json
  def index
    @community = Community.includes(:discussions).find(params[:community_id])
    @discussions = @community.discussions
  end

  # GET /discussions/1
  # GET /discussions/1.json
  def show

  end

  # GET /discussions/new
  def new
    @discussion = @community.discussions.new
  end

  # GET /discussions/1/edit
  def edit
  end

  # POST /discussions
  # POST /discussions.json
  def create
    @discussion = current_user.discussions.new(discussion_params)
    @discussion.community = @community

    if @discussion.save
        redirect_to [@community, @discussion], notice: 'Product was successfully created.'
      else
         render :new
    end
  end

  # PATCH/PUT /discussions/1
  # PATCH/PUT /discussions/1.json
  def update
      if @discussion.update(discussion_params)
          redirect_to [@community, @discussion] , notice: 'Product was successfully updated.'
      else
         render :edit
      end
  end

  # DELETE /discussions/1
  # DELETE /discussions/1.json
  def destroy
    @discussion.destroy
    redirect_to [@community, :discussions] , notice: 'Product was successfully destroyed.'
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_community
      @community = Community.find(params[:community_id])
    end

    def set_discussion
      @discussion = @community.discussions.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def discussion_params
      params.require(:discussion).permit(:community_id, :title, :content, :user_id)
    end
end

permasalahannya saya ingin menjadikan discussion sebagai "index" nya jadi pada saat web dibuka menampilkan seluruh discussion yang telah dibuat oleh anggota community.
kalau saya atur root "discussions#index" keluar error Couldn't find Community without an ID.

Agung Setiawan pada 17 Mei 2019

Errornya karena buat nampilin discussion memang butuh id Community.
Pertanyaan saya, emang secara flow aplikasi kamu bisa buat nampilin discussion tanpa melihat community? Padahal route-nya dibuat nested kalau mau lihat discussion ya harus tahu community-nya.

Wellborn pada 18 Mei 2019

Secara flow memang tidak bisa melihat discussion nya harus melewati community dulu.
tetapi saya ingin menampilkan discussionnya yang telah dibuat oleh anggota komunitas pada saat aplikasi pertama kali dibuka.
apakah bisa di atur jika menggunakan nested route untuk menampilkan discussions nya diawal ya mas.?

Agung Setiawan pada 18 Mei 2019

Index discussion kan berarti nampilin semua diskusi dari satu komunitas tertentu. Kalau gitu perlu diambil salah satu komunitas yang mau ditampilin di index buat nilai default

Misal id komunitasnya 10

def index
   id = params[:community_id].presence || 10
    @community = Community.includes(:discussions).find(id)
    @discussions = @community.discussions
  end
Wellborn pada 19 Mei 2019

Kalau case nya komunitas a buat discussion akan tampilkan di index kemudian komunitas b buat discussion jg tampil di index bearti routes ny jgn dinested kan mas?

Agung Setiawan pada 19 Mei 2019

kalau routingnya nested gitu, index discussion-nya hanya yang dimiliki oleh komunitas tertentu (yang id-nya ada di url atau yang id default)

Kalau mau lebih dari satu komunitas pakai route lain aja misal /discussions terus penentuan yang muncul di index yang punya 3-5 komunitas terpilih/

Wellborn pada 21 Mei 2019

baik mas agung terima kasih atas masukannya