拥有这些示例模型:
class Post < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :posts
end
想象一下,我有一个表单来创建新帖子,默认情况下我会得到一个包含可用类别列表的选项,但是如果我想从“新/编辑帖子”表单中创建新类别呢?
使用弹出窗口以创建新类别的选择框的按钮是完美的。
比创建新类别然后创建新帖子更好。
我经常看到的是创建has_many关联,但不是belongs_to one。
谢谢
答案 0 :(得分:0)
我想你在这里问几个问题。我要说的是,更重要的是如何在与其通常构建方式相反的方向上创建关联(因为那是我知道如何回答的关联)。我会专注于那个。
为简单起见,我只会定义一个带有标签的简单文本字段,您可以将其作为表单的一部分填写。
= label_tag :new_category_name
= text_field_tag :new_category_name
在您的控制器中,您可以像这样构建新类别。
@post.build_category(name: params[:new_category_name])
如果您以常规方式保存@post,那么类别将在与帖子相同的事务中创建,因此如果失败则不会创建类别。如果您希望它保存类别,无论您可以调用@post.create_category
而不是。
这是文档: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
在表格奇异关联(一对一)中,将other
替换为您的模型名称。
我认为另一个问题是如何让它在视图中看起来很好看。你当然可以选择如何使它看起来很好。您可以按照建议创建弹出窗口。您也可以使用AJAX发送一个小的xhr请求。我也见过花哨的组合选择/文本框。