1

我在我的has_and_belongs_to_many模型中創建一個新的關係時遇到了一些麻煩。我這樣定義的車型:如何在HABTM Rails Association中創建記錄如何做到這一點?

journals model 

    has_and_belongs_to_many :posts 

post model 

    has_and_belongs_to_many :journal 

我不知道如何創建的關聯,我做了一個按鈕,但我不知道它是如何工作的。我創建的操作add_post

def add_post 
    @journal_post = JournalsPosts.new 
    end 

我做此鏈接創建的關聯,但我不知道我現在要做的:

<%= link_to "Add to Journal",:controller => "journals",:action => "add_post" %> 

重定向工作正常,但我不知道現在該怎麼辦?你知道關於HABTM協會的一些指南嗎?我已經試過this,但它沒有幫助。

回答

0

您應該高度考慮使用has_many, :through,因爲這是現在在Rails中執行這些關係的首選方式。

也就是說,如果你想繼續has_and_belongs_to_many,你需要以某種方式獲得你想要關聯的日誌和發佈id,這樣你才能正確地創建關聯。

在你的路線:

resources :journals do 
    member do 
    put :add_post 
    end 
end 

在您的視圖(請確保您設置@journal@post某處):

<%= link_to "Add to Journal", add_post_journal_path(@journal, :post_id => @post.id), :method => :put %>

在你的控制器:

def add_post 
    @journals_posts = JournalsPosts.new(:journal_id => params[:id], :post_id => params[:post_id]) 

    if @journals_posts.save 
    ... 
    else 
    ... 
    end 
end 
+3

我意識到OP有「JournalsPosts」,但該模型甚至不存在,也不應該與habtm關係。 – shiggity

+0

是的,我不知道爲什麼這個答案被接受... – OiciTrap

0

我謝謝,但add_post將是ap這將有論文列出的用戶選擇哪個報社他,他將要添加的年齡後,我讓更多的樣本,是這樣的:

控制器:

def add_post 
    @journal_post = JournalsPosts.new 
    session[:post_add] = params[:id] 
    end 

    def add_post_complete 
    @journal_post = JournalsPosts.create(:post_id => session[:post_add],:journal_id => params[:id]) 

    respond_with @journal_post 
    end 

的add_post.html。 ERB

<h1>Escolha o Jornal que deseja adicionar:</h1> 
<ul> 
<% current_user.journals.each do |journal| %> 
     <li><%= link_to journal.name,add_post_complete_journal_path(journal),:remote=>true %> </li> 
<%end%> 
</ul> 

,所以我使JS的add_post_complete,使路線是:

resources :journals do 
    member do 
    put :add_post 
    get :add_post_complete 
    end 
    end 

這工作正常,非常感謝幫助我學習路由中的成員非常非常重要的非常感謝。

更多的一件事,如果我想exibe燈箱白衣期刊的choise你知道我是如何做到這一點,請真的非常感謝,多學習你的反應。

10

研究這個自己後,你應該能夠做到

def add_post 
    j = Journal.first # or find_by, etc 
    p = Post.first # or find_by, etc 
    j.posts << p # creates a record in journals_posts table 
    j.save! 
end 

(1)接受的答案,似乎只要雖然該協會只能直接進行。如果你使用habtm關聯,你也不會有「JournalsPosts」類,因爲它明確避免了使用中間表的模型。

(2)請注意,此關聯不是唯一的。如果您多次調用此函數,則會在journals_posts表中使用相同的兩個整數對獲取多個條目。

+5

你不需要'j.save!' – wik