2011-08-28 5 views
8

사용자가 관심이있는 항목에 "태그를 지정할 수있는"태그 기능을 만들려고합니다. 여기 내 모델 해당 DB 테이블이 필요 :user_id:item_id 필드가Rails 3 - link_to에서 새 레코드를 만드는 방법

class tag 
    belongs_to :user 
    belongs_to :item 
end 

입니다.

:items 목록에서 사용자가 :item을 태그 할 수 있도록 각 :item 옆에 링크가 필요합니다. :user_id:item_id을 알고 있기 때문에 새로운 :tag 레코드를 만들고 ID 필드를 설정하고 레코드를 저장하려고합니다. 사용자 개입없이 모두이 레코드를 저장하려고합니다. 나는 link_to에 다음 전화를 시도하지만 기록은 데이터베이스에 저장되지 않습니다 :

<%= link_to 'Tag it!', {:controller => "tracks", 
         :method => :post, 
         :action => "create"}, 
         :user_id => current_user.id, 
         :item_id => item.id %> 

(이 코드는 내 :. @item.each do |item| 문, 그래서 item.id가 유효)

link_to 호출이 생성 이 URL :

http://localhost:3000/tags?method=post&tag_id=7&user_id=1 

데이터베이스에 Tag 레코드가 생성되지 않습니다. 여기에 내가 새 태그 레코드를 생성하고 저장하는 LINK_TO을 얻을 수있는 방법 tags_controller

def create 
    @tag = Tag.new 
    @tag.user_id = params[:user_id] 
    @tag.tag_id = params[:tag_id] 
    @tag.save 
    end 

:create 조치는 무엇입니까?

답변

14

생성 된 URL에 매개 변수로 method가 포함되어 있다는 사실은 POST가 아니라 GET을 수행한다는 것을 의미합니다. 당신이 사용하고 있어야합니다

LINK_TO 서명은 link_to(body, url_options = {}, html_options = {})

<%= link_to 'Tag it!', {:controller => "item", 
         :action => "create", 
         :user_id => current_user.id, 
         :item_id => item.id}, 
         :method => "post" %> 

이다 방법은 html_options에 전달 url_options에 휴식을해야합니다. 이것은 효과가있다.

+0

감사합니다. 그것은 당신의 수정으로 잘 작동합니다. 답변에 link_to 서명을 표시하면 실제로 무슨 일이 벌어지고 있는지 이해할 수있었습니다. 매우 감사. –

+1

그냥 빠른 코멘트. url_options 해시에서 컨트롤러 키의 값은 "항목"이 아닌 "항목"이어야합니다. 링크를 표시하려고 할 때 ActionController 라우팅 오류가 발생합니다. – icantbecool

+0

@dexter 링크가 이메일과 같이 앱 외부에 있다면 어떻게됩니까? 내 유스 케이스는 답장을위한 것입니다. 전자 메일 링크에서 직접 새 RSVP를 만들고 싶지만 RESTful 상태를 유지하고 싶습니다. – Mohamad

관련 문제