好的,所以这里没有代码我想就你如何解决这个问题得到一些反馈。
我有一本书,我想给用户一个创建短,中或长书的选项。这将创建一个整数,0,1,2然后是一个常量,并将定义帖子的长度:
我正坐在这里挠头,我应该在模型中为短,中,长创建多个类,然后在那里设置常量,以便当用户选择0时,例如它链接到类short<书。我试着把它映射到纸上,让自己更加困惑。
关于如何处理此问题的一些帮助或反馈非常有用。
编辑:感谢Sevencats,这就是我的想法。快速问题,我如何使用表单构建器集合选择在Books.size中定义这些值?我需要通过0,1,2的形式将值传递给列大小。
答案 0 :(得分:2)
这对我来说听起来像是条件验证。
如果一本书有一个属性,例如。 length
和长度可以是0,1或2,然后当您向帖子添加帖子时,帖子的长度将根据父书的长度进行验证。
类似的东西(这可能不是你的确切例子但足够接近):
class Book < ActiveRecord::Base
has_many :posts
def short?
length == 0
end
def long?
length == 2
end
end
class Post < ActiveRecord::Base
belongs_to :book
validates_length_of :content, less_than: 500, if: book.short?
validates_length_of :content, less_than: 1000, if: book.long?
end
答案 1 :(得分:1)
回答你的第二个问题:我不会去收集。我会这样做:
在Book
模型中定义常量:
SIZES = {0 => 'Small', 1 => 'Medium', 2 => 'Large'}
现在可以从任何地方访问此哈希:
Book::SIZES
和
Book::SIZES[1]
=> "Medium"
在视图中,当您需要选择时,请执行:
form_builder.select :size, Book::SIZES.invert
invert
会将值设置为键,将键设置为值,这是select
方法所需的。
想想看,你甚至可以把它放在Book
模型中:
SIZES = {SMALL=0 => 'Small', MEDIUM=1 => 'Medium', LARGE=2 => 'Large'}
现在您可以转到Book::SMALL
,它会为您提供0
。
从Book
模型中,您不必将Book
添加到事物前面,这样您就可以随意使用MEDIUM
,然后转到:
SIZES[ MEDIUM ]
# which is the same as:
SIZES[1]
它会为您提供"Medium"
。