我在has_and_belongs_to_many
模型中创建新关系时遇到了一些麻烦。我定义了这样的模型:
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 :(得分:12)
在自己研究之后,你应该可以做到
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)接受的答案听起来似乎只能直接进行关联。你也没有&#34; JournalsPosts&#34; class,如果您正在使用habtm关联,因为它特别避免使用中间表的模型。
(2)请注意,此关联不是唯一的。如果你多次调用,你将在journals_posts表中获得具有相同两个整数对的多个条目。
答案 1 :(得分: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
答案 2 :(得分:0)
我感谢,但是add_post将是一个页面,其中列出的文件供用户选择他要添加帖子的哪个报纸,我制作更多样本,因此:
控制器:
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
这很好,非常感谢帮助我非常非常重要地了解路线中的成员。
更重要的是,如果我想要exib一个灯箱,那么你应该知道我是如何制作这个,请非常非常感谢,多多了解你的回应。