ove*_*uka 2 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2
我在has_and_belongs_to_many模型中创建新关系时遇到了一些麻烦.我定义了这样的模型:
journals model
has_and_belongs_to_many :posts
post model
has_and_belongs_to_many :journal
Run Code Online (Sandbox Code Playgroud)
我不知道如何创建关联,我做了一个按钮,但我不知道它是如何工作的.我创造了这个动作add_post
def add_post
@journal_post = JournalsPosts.new
end
Run Code Online (Sandbox Code Playgroud)
我建立这个链接来创建关联,但我不知道我现在要做什么:
<%= link_to "Add to Journal",:controller => "journals",:action => "add_post" %>
Run Code Online (Sandbox Code Playgroud)
重定向工作正常,但我不知道现在该怎么办?你知道HABTM协会的一些指南吗?我已经试过了,但没有用.
shi*_*ity 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
Run Code Online (Sandbox Code Playgroud)
(1)接受的答案听起来似乎只能直接进行协会.如果您使用habtm关联,也不会有"JournalsPosts"类,因为它特别避免使用中间表的模型.
(2)请注意,此关联不是唯一的.如果你多次调用,你将在journals_posts表中获得具有相同两个整数对的多个条目.
Jos*_*ken -3
您应该高度考虑使用,has_many, :through因为这是现在在 Rails 中建立此类关系的首选方式。
也就是说,如果您想继续has_and_belongs_to_many,您需要以某种方式获取您想要关联的期刊和帖子 ID,以便您可以正确创建关联。
在您的路线中:
resources :journals do
member do
put :add_post
end
end
Run Code Online (Sandbox Code Playgroud)
在您看来(确保您在某处设置@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7589 次 |
| 最近记录: |