Rails has_many 通过表单,在连接模型中带有复选框和额外字段
我正在尝试解决一个非常常见的(正如我所想的)任务。
共有三种模型:
class Product < ActiveRecord::Base
validates :name, presence: true
has_many :categorizations
has_many :categories, :through => :categorizations
accepts_nested_attributes_for :categorizations
end
class Categorization < ActiveRecord::Base
belongs_to :product
belongs_to :category
validates :description, presence: true # note the additional field here
end
class Category < ActiveRecord::Base
validates :name, presence: true
end
当涉及到产品新建/编辑表单时,我的问题就开始了。
创建产品时,我需要检查它所属的类别(通过复选框)。我知道可以通过创建名称如“product[category_ids][]”的复选框来完成。但我还需要输入每个已检查关系的描述,该描述将存储在连接模型(分类)中。
我在复杂的表单、habtm 复选框等上看到了那些漂亮的 Railscast。我几乎一直在 StackOverflow 上搜索。但我还没有成功。
我发现一篇帖子描述了与我几乎完全相同的问题。最后一个答案对我来说有一定意义(看起来这是正确的方法)。但它实际上并不能很好地工作(即如果验证失败)。我希望类别始终以相同的顺序显示(以新/编辑表单;验证之前/之后),并且复选框在验证失败时保持在原来的位置,等等。
任何想法都值得赞赏。 我是 Rails 新手(从 CakePHP 切换过来),所以请耐心等待并尽可能详细地写。请指出我正确的方法!
谢谢。 :)
I'm trying to solve a pretty common (as I thought) task.
There're three models:
class Product < ActiveRecord::Base
validates :name, presence: true
has_many :categorizations
has_many :categories, :through => :categorizations
accepts_nested_attributes_for :categorizations
end
class Categorization < ActiveRecord::Base
belongs_to :product
belongs_to :category
validates :description, presence: true # note the additional field here
end
class Category < ActiveRecord::Base
validates :name, presence: true
end
My problems begin when it comes to Product new/edit form.
When creating a product I need to check categories (via checkboxes) which it belongs to. I know it can be done by creating checkboxes with name like 'product[category_ids][]'. But I also need to enter a description for each of checked relations which will be stored in the join model (Categorization).
I saw those beautiful Railscasts on complex forms, habtm checkboxes, etc. I've been searching StackOverflow hardly. But I haven't succeeded.
I found one post which describes almost exactly the same problem as mine. And the last answer makes some sense to me (looks like it is the right way to go). But it's not actually working well (i.e. if validation fails). I want categories to be displayed always in the same order (in new/edit forms; before/after validation) and checkboxes to stay where they were if validation fails, etc.
Any thougts appreciated.
I'm new to Rails (switching from CakePHP) so please be patient and write as detailed as possible. Please point me in the right way!
Thank you. : )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看来我想通了!这是我得到的:
我的模型:
形式:
和控制器:
乍一看它工作得很好。我希望它不会以某种方式损坏..:)
谢谢大家。特别感谢 Sandip Ransing 参与讨论。我希望它对像我这样的人有用。
Looks like I figured it out! Here's what I got:
My models:
The form:
And the controller:
From the first glance it works just fine. I hope it won't break somehow.. :)
Thanks all. Special thanks to Sandip Ransing for participating in the discussion. I hope it will be useful for somebody like me.
使用
accepts_nested_attributes_for
插入中间表
即分类
视图表单看起来像 -
内部视图
use
accepts_nested_attributes_for
to insert intointermediate table
i.e.categorizations
view form will look like -
Inside view
我刚刚做了以下事情。它对我有用..
I just did the following. It worked for me..