【发布时间】:2012-02-28 10:14:55
【问题描述】:
我已经阅读了这方面的文档,但我仍然不知道该怎么做。
我在表中有一个 :free 列,它是一个布尔值
true = free
false = paid
nil = both
我正试图在我的表单中捕捉同样的逻辑,但我做得非常糟糕......到目前为止,一切都是免费的
index.html.erb:
<div class="field">
<label class="radio">
<%= radio_button_tag(:free, "free", :checked => true) %>
Free
</label>
<label class="radio">
<%= radio_button_tag(:free, "paid") %>
Paid
</label>
<label class="radio">
<%= radio_button_tag(:free, "both") %>
Both
</label>
</div>
resources_controller.rb(我知道这并不理想,因为它每次都检查参数(即使他们输入了错误的信息)但我不确定如何检查是否可以在不保存的情况下保存它。另外。 ..我什至不知道我的参数是否正确,但我也不知道如何检查它。当我做p params[:resources]时,它不会打印出它的id。有没有一种好方法来做这种事情轨道?
def create
@resource = Resource.new(params[:resource])
if params[:resource][:free] = "free"
@resource[:free] = true
elsif params[:resource][:free] = "both"
@resource[:free] = nil
else
@resource[:free] = false
end
if @resource.save
redirect_to root_url
else
render :action => :new
end
end
resources_helper.rb
def output_free
if @resource.free = true
"Free"
elsif @resource.free = false
"Paid"
else
"Both"
end
end
【问题讨论】:
-
您需要
==进行比较。而且nil不是Boolean。 -
好吧,我觉得自己很弱智。我一直盯着这种方式太久了。我知道:|至于布尔值,我不能用它来检查 3 个状态吗?
-
那是模糊逻辑,
true/false/null。 SQL 中确实存在,您可以使用它,但这是您不想要的魔法。使用Enum和三种状态 - 方式更清晰。 -
你能给我指出 Enum 的资源吗?我不记得读过这个,特别是我如何在数据库迁移中写这个
-
不,您在使用 AR 时需要自定义 SQL。 Datamapper 具有 Enum 数据类型。您也可以使用简单的
varchar(50)列:-)
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2