2010-02-06 5 views
25

두 번째 모델 인 link_tag와 link_tags가 있습니다. 다음 코드는 내 링크 모델에 있습니다.has_many => : with 옵션을 사용하여 accepts_nested_attributes_for을 입력하십시오.

협회 : new.html.erb에서

def new 
    @link = @current_user.links.build 
    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @link } 
    end 
    end 

    def create 
    @link = @current_user.links.build(params[:link]) 

    respond_to do |format| 
     if @link.save 
     flash[:notice] = 'Link was successfully created.' 
     format.html { redirect_to links_path } 
     format.xml { render :xml => @link, :status => :created, :location => @link } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @link.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

보기 코드 :

class Link < ActiveRecord::Base 
    has_many :tags, :through => :link_tags 
    has_many :link_tags 

    accepts_nested_attributes_for :tags, :allow_destroy => :false, 
    :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } } 
end 

class Tag < ActiveRecord::Base 
    has_many :links, :through => :link_tags 
    has_many :link_tags 
end 

class LinkTag < ActiveRecord::Base 
    belongs_to :link 
    belongs_to :tag 
end 

links_controller 작업

<% form_for [current_user, @link], :url => account_links_path do |f| %> 
<%= render :partial => "form", :locals => { :f => f } %> 
<% end %> 

그리고 해당 부분 :

<%= f.error_messages %> 

    <p> 
    <%= f.label :uri %><br /> 
    <%= f.text_field :uri %> 
    </p> 
    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 

    <h2>Tags</h2> 
    <% f.fields_for :tags_attributes do |tag_form| %> 
    <p> 
    <%= tag_form.label :name, 'Tag:' %> 
    <%= tag_form.text_field :name %> 
    </p> 
    <% unless tag_form.object.nil? || tag_form.object.new_record? %> 
    <p> 
    <%= tag_form.label :_delete, 'Remove:' %> 
    <%= tag_form.check_box :_delete %> 
    </p> 
    <% end %> 
    <% end %> 

    <p> 
    <%= f.submit 'Update' %> 
    </p> 
링크 컨트롤러에서 생성 행동 16,

다음의 코드는, 에러가 발생합니다 :

@link = @current_user.links.build(params[:link]) 

오류 : Tag(#-621698598) expected, got Array(#-609734898)

이 has_many에 필요한 추가 단계가 있습니다 => : 사건을 통해? 이것들은 기본 has_many 경우에 대해 유일한 변경 사항 인 것 같습니다.

+0

같은 컨트롤러에 연결 및 태그 구축이 있는지 확인 문제가 해결됩니다. 3 가지 모델의 연관 부품 (has_many/belongs_to/etc 라인)을 게시 할 수 있습니까? 관련 컨트롤러 액션 (links # new, links # create)과 링크 양식과 관련된 모든보기 코드. – EmFi

+0

연관, 컨트롤러 작업 및보기에 대한 코드를 추가했습니다. 당신의 도움을 주셔서 감사합니다. 지금 –

답변

1

이 시도 : 컨트롤러에서

<% f.fields_for :tags_attributes do |tag_form| %> 
+1

다른 오류 : "코딩"에 대한 '정의되지 않은 메서드'with_indifferent_access'문자열 ' 매개 변수 : {, "authenticity_token을"=> "업데이트"를 "커밋"=> "fwCGGgcTKOSfxpFJMXmq7IUfRtfOvdOKl31Xys4TKC8 =" "링크를 "제목"=> "스택 오버플로"}} "=> {"tags_attributes "=> {"name "=>"코딩 "},"uri "=>"http://stackoverflow.com " 제안 해 주셔서 감사합니다. 이것에 대한 해결책이 있습니까? 속성 중 하나의 값을 해시로 처리하려고합니까? –

+0

그 엉망에 맞는 형식을 얻을 수있는 방법이 있습니까? –

+0

전체 양식을 붙여주세요. – obiwanchinobi

0

을 새로운 액션 (즉 부분적인 형태를로드), 당신은 귀하의 링크를 통해 @tag을 구축에? 그것은 새로운 내용을 게시하고 links_controller의 조치를 만드는 것이 가장 수 있습니다

@link = Link.new 
@tag = @link.tags.build 

:

그래서 당신의 라인을 따라 뭔가를 볼 수 있습니다. 작업이 위해서는

+0

컨트롤러 작업이 이제 원래 게시물에 있습니다. 새 작업에서 태그를 생성하지 않습니다. 나는 멀티 - 모델 섹션과 함께 다음을 보았다 : http://guides.rubyonrails.org/getting_started.html. 컨트롤러 변경을 나타내지는 않았다. 즉, 새 양식은 태그가 없어도 자동으로 태그 상자를 생성합니다. –

2

, 당신은 바로 PARAMS 해시에 전달해야

params = { 
    :link => { 
    :tags_attributes => [ 
     {:tag_one_attr => ...}, {:tag_two_attr => ...} 
    ], 
    :link_attr => ... 
    } 
} 

그리고 컨트롤러는 다음과 같이 표시됩니다

def create 
    @link = Link.create(params[:link]) # this will automatically build the rest for your 
end 
0

시도

<% f.fields_for :tags do |tag_form| %> 

(예 : _attributes를 잃어 버리는 : tag_attributes) 그 방법은 보통 중첩 된 양식을 수행했습니다.

0

당신은 당신은 단지 :tags 대신 :tags_attributes의를 사용할 필요가 코드

<% f.fields_for :tags_attributes do |tag_form| %> 

의 라인을 살펴보십시오 컨트롤러 또는보기

def new 
    @link = @current_user.links.build 
    @link.tags.build 
end 

#in your view you can just use the association name 
<% f.fields_for :tags do |tag_form| %> 
7

에서 태그를 구축 할 필요가있다. 이

당신은 당신이 게시 한 코드에 따라 문제를 재현 할 수없는 오전

def new 
    @link = @current_user.links.build 
    @link.tags.build 
end 
관련 문제