2013-06-18 3 views
0

레일 사이트에 "즐겨 찾기"버튼을 만들려고합니다. 두 가지 모델, 사용자 및 자료가 있습니다. 내가 수행 한 다음레일에 즐겨 찾기 관계를 만드는 방법 3.2

나는 스키마에 다음과 같습니다 새 테이블 "favmats"만든) :

class Favmat 
    belongs_to :user 
    belongs_to :material 
end 

class Materials 
    has_many :favmats 
    has_many :users, :through => :favmats 
end 

class Users 
    has_many :favmats 
    has_many :materials, :through => :favmats 
end 
: 나는 모델 사이의 관계를 설정

create_table "favmats", :force => true do |t| 
    t.integer "user_id" 
    t.integer "material_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

B)를

c) 자료 표시 페이지에서 데이터베이스에 새로운 관계를 작성하는 코드를 실행해야하는 양식을 작성했습니다. 이 문제가있는 것 같습니다. 따라서 코드이다

def create 
    @material = Material.find(params[:id]) 
    respond_to do |format| 
    if @favmat.save 
     format.html { redirect_to @material } 
     format.js 
    else 
     format.html { render 'new' } 
     format.js 
    end 
    end 
end 

물론,이 작동하지 않는 경우 :

<%= form_for @favmat do |f| %> 
    <%= f.hidden_field :user_id, value: @user.id %> 
    <%= f.hidden_field :material_id, value: @material.id %> 
    <%= f.submit "Favourite" %> 
<% end %> 

d)는이 같은 보이는 favmats_controller시키는 방법을 만들었다. 내가해야 할 아이디어가 있습니까? 나의 가장 큰 혼란의 원천은 어디에서 새로운 favmats 객체를 생성해야하는지입니다.

+0

그 중 어떤 부분이 작동하지 않습니까? 에러 메시지? 라우팅 문제가 있습니까? – davidfurber

+0

[socialization] (https://github.com/Shreshtt/socialization) gem을 사용할 수 있습니다. 그것은 많은 기능을 제공합니다. Like 기능을 즐겨 찾기로 사용할 수 있습니다. – SoftwareGeek

+0

hmmm 실제로 find 메서드를 사용하고 레코드를 저장하고 있습니다. .new 메서드를 사용하여 레코드를 초기화하고 params 레코드를 전달한 다음 .save 메서드 – bunty

답변

3

작성 기능에서 작성 조치로 존재하지 않는 :id 매개 변수를 사용하려고합니다. 또한 favmat 개체를 만들지 않고 존재하지 않는 무언가를 저장하려고합니다.

def create 
    @favmat = Favmat.new(params[:favmat]) 
    respond_to do |format| 
    if @favmat.save 
     format.html { redirect_to @favmat.material } 
     format.js 
    else 
     format.html { render 'new' } 
     format.js 
    end 
    end 
end 
+0

감사 매트를 사용하여 레코드 저장을 기록해야합니다. 빠른 보충 질문 : 조건문 앞에 @ favmat.save를 코딩 할 필요가없는 이유는 무엇입니까? – Finnjon