2010-03-25 2 views
0

현재 프로젝트를위한 준 소형 루비 앱을 만들고 있습니다. 현재 직면하고있는 문제는 다음과 같습니다.내 레일 앱에서 내 기사에 카테고리 추가 (작은 도움)

기사를 카테고리에 맞게 만들 수 있어야합니다. 나는 이미 두 가지 모델을 가지고 이것을 수행했습니다. category_id의 외래 키와 카테고리 이름이 포함 된 내 카테고리 모델이있는 기사 모델입니다. has_one 및 belogs_to 관계. (우리는 당신이 한 범주에만 기사를 넣을 수 있다고 가정합니다). 여기에 코드 조각이 있습니다.

이것은 새 기사를 만들고 모든 카테고리를로드하는 새로운 방법입니다.

def new 
@article = Article.new 
@categories = Category.find(:all) 
end 

문제는 기사와 함께 삽입하기 위해 카테고리를 콤보 상자에서 가져 오려고 할 때 발생합니다.

콤보 상자 코드 :

f.select(:category_id,@categories) 

그리고 이것은 만드는 방법입니다 : 내가로드하려고 할 때

def create 
    @category = Category.find(params[:id]) 
    @article = @category.articles.new(params[:article]) 

    if @article.save 
    flash[:notice] = "Article Submitted Sucessfully" 
    redirect_to user_path 
    else 
    render :action => 'new' 
    end 
end 

나는 내가 가지고있는 문제는이 라인에 있음을 믿는다 이 카테고리를 하드 코드 할 때마다 선택한 카테고리 "@category = Category.find (params [: id])"가 표시됩니다.

@category = Category.find(1) 

완벽하게 작동합니다.

답변

2

문제는 f.select에 있습니다. 두 번째 매개 변수는 옵션 목록의 값을 범주 ID로 설정하지 않습니다. 폼 빌더의 select 메소드는 다소 부족합니다. 대신이 작업을 수행 할 것입니다 :

<%= collection_select :article, :category_id, @categories, :id, :name, @article.category_id %> 

그리고 올바른 값을 컨트롤러에 제공해야합니다.

그런 다음 컨트롤러에서, 당신은 대체 할 수

@category = Category.find(params[:id]) 
@article = @category.articles.new(params[:article]) 

CATEGORY_ID가 PARAMS에서 올 것이다 올바르게 설정

@article = Article.new(params[:article]) 

와 함께.

+0

어떤 이유로 든 계속 "정의되지 않은 메소드'stringify_keys '" 선택 라인에서. :/ – Gotjosh

+0

죄송합니다. 메모리에서 빠져 나와 잘못된 기능을 사용했습니다. 실제 문서를 기반으로 답변을 수정했습니다. – Tilendor

+0

그게 효과가 있었어! :] 당신은 대답이 제 것보다 훨씬 낫습니다. :) 그냥 과 선택을 교체 <: 기사 : CATEGORY_ID, @categories : ID : % = collection_select 이름 %> 하고 완벽하게 끝에서 해당 객체에 대한 필요가 작동하지 않습니다 – Gotjosh

관련 문제