2013-05-26 7 views
0

태그가있을 수있는 것보다 게시 용 양식으로 작업 중입니다. 그 관계는 PostTag 사이의 고전적인 has_and_belongs_to_many입니다. 태그가있는 게시 모델의 양식

Post.new(tags: [1, 2, 3, 4]) # won't wotk. ActiveRecord expects Tag instances 

을 그래서 내 현재의 형태는 다음과 같이이다 :

= form_for @post do |f| 
    = f.text_field :title, placeholder: 'title...' 
    = f.text_area :body 
    = fields_for :'post[tags]' do |ft| # hacky. using @post.tags raised 'undefined `model name` for `@post.tags`' 
     - Post.tags.each do |tag| # I defined Post::tags since I can't Acces Tag class here 
      = ft.check_box tag.id 
      = tag.name 
    = f.submit 'Save' 

이러한 형태의 강제 나

문제는이 같은 태그 ID의 배열 게시물을 초기화 할 수 없습니다입니다 어느 컨트롤러에서든 해킹 할 수는 있지만 나쁜 습관으로 보입니다. ActiveRecord :: Base 이니셜 라이저를 재정의하여 첫 번째 예제가 작동하도록 ID를 허용 할 수 있다고 생각했지만 여기에 뭔가 빠졌습니다.

답변

0

쉽고 비트 해키 솔루션 :

# defined in my posts controller 
def post_params 
    p = params.require(:post).merge(user: current_user) 
    p[:tags] = p[:tags].map do |id, value| 
    value == '1' ? Tag.find(id) : nil 
    end.compact! 
    p 
end