2010-12-22 3 views
2

리뷰 테이블이 있습니다.레일즈 3 : 외래 키 3 개로 인스턴스 만들기

# Table name: reviews 
# 
# id   :integer   not null, primary key 
# wsp_id  :integer 
# service_id :integer 
# user_id  :integer 
# description :text 
# rating  :integer 
# created_at :datetime 
# updated_at :datetime 
# 

    belongs_to :wsp 
    belongs_to :service 
    belongs_to :user 

서비스에 대한 리뷰를 작성하고 wsp_id 및 user_id를 전달하려면 어떻게해야합니까? 중첩 된 경로를 사용해야합니까?

@user.reviews.new(params[:review]) 할 수 있지만 wsp_idservice_id 전달할 수 없습니다.

여기 내 리뷰가 컨트롤러를 만듭니다.

 def create 
    @review = current_user.reviews.new(params[:review]) 

    if @review.save 
     #Saved 
    else 
     #Error, not saved 
    end 
    end 

내가 뭘 잘못하고 있니?

고마워요!

답변

0

routes.rb

resources :services do 
    resources :review 
end 

resources :review, :only => [:create] 

당신이 어떤 중첩없이 독립적 검토를 만들 수있을 것입니다 이런 식으로. 귀하의 양식 내에서 데이터를 읽고 그것을 어떻게 든 행동 URL에 넣을 필요는 없습니다 :) 그것은 추한 것입니다. 그러나 자바 스크립트를 사용하여 그것을 할 수는 있지만 기본적으로는 행운입니다. 새의보기에서

= form_for(review) do |f| 
    = f.collection_select :service, Service.all 
    = ..more model fields.. 
0

매개 변수를 중첩 (예 : params[:review][:service_id])하고 params[:review]을 전달 했습니까?

+0

은 어떻게받을 수 있나요 파일을 어떤 경로를 변경하여 모델에 외래 키를 추가 할 것인가? – donald

+1

@donald, 경로 (또는 중첩 된 경로) 만 데이터를 가져 오는 것이 아닙니다. 예를 들어 세션에서 wsp_id와 service_id를 가져 와서 create 액션에서 create 호출 전에 params에 병합 할 수 있습니다. 애플리케이션의 어딘가에서 service_id 또는 wsp_id의 값을 결정할 필요가있다. –

+0

@Aditya 다른 방법으로 설명해 주시겠습니까? 고마워요 – donald

0

나는 종류가 너무 레일 ... 그러나 희망이 도움이됩니다. 경로가 중첩되지 않은 경우 SERVICE_ID : 이

def new 
    @anime = Anime.new 
    user_id = session[:user_id] 
end 

def create 
    @anime = Anime.new(params[:anime]) 
    @anime.user_id = session[:user_id] 
end