我的表格中有是或否的选择表格
<%= form_for(@post) do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.select :happy, ['Yes', 'No'], {}, :class => 'form-control' %>
<% end %>
模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
has_many :posts
end
路线:
devise_for :users
我想在模型中添加一个条件来检查用户是否选择了“是”。我尝试过这样的东西,但它不起作用?:
if self.happy = "yes"
do something here
end
如何检查用户是否选择是?
答案 0 :(得分:1)
您可以从params
如果您的表单如下所示:
<%= form_for @resource do |f| %>
<%= f.select :happy, ['Yes', 'No'], {}, :class => 'form-control' %>
<% end %>
然后您可以按如下方式在控制器中获取所选值:
if params[:resource][:happy] == 'Yes'
do something....
end
如果您想在模型中执行某些操作,那么您只需调用模型的方法并将params
值作为参数传递,然后完成剩下的工作。
答案 1 :(得分:1)
好的,所以猜测快乐是string
?我会说你的解决方案, double equa l符号应该有效。
如果它应该是boolean
,我相信你可以这样做:
<%= f.select :happy, [['Yes', true], ['No', false]], {}, :class => 'form-control' %>
现在,我有一半偏执,它将被解释为string
,如果是这样,您可能需要使用双等等符号进行一些控制器检查。
刚刚检查过,我的解决方案使用boolean
为我工作。
如果您愿意,您可以构建演示者,装饰器,在整个应用程序中实现此功能。
MVVM试图完成的任务,减少转换量和所需的粘合代码。
我强烈建议使用boolean
作为是/否数据,因为它可以用true / false表示。存储string
,然后执行检查也意味着.downcase
或.upcase
string
以确保检查在应有时通过。
如果您要保存select_tag
(即"Yes"
)的数据而不进行转换,请检查happy == "yes"
是否为false
。
使用boolean
完全消除了这个问题。
thing.update(thing_params)
if.happy?
do something here
end
答案 2 :(得分:1)
我认为用户应该对帖子感到满意或不满意。 (你也有邮寄表格,而不是用户。)
因此,您应该将快乐状态存储在用户表中,而不是存储在posts表中。否则,每次用户提交新帖子时都会重写。 否则,如果您只想在用户模型中存储最后的满意状态,则应使用PostsController收集快乐字段并手动将其保存到用户模型。
无论如何,最好的方法是将所有快乐状态存储在posts表中,并仅选择最后一个。因此,幸福状态的历史将是完整的,并且您总是可以将幸福状态与适当的职位相关联。
您的用户模型实现应如下所示:
# determine if user was happy last time he submitted new post
def happy?
# getting last post, assume it has created_at field
last_post = self.posts.order("created_at").last
# return true if user was happy
last_post.happy == "yes"
end
...
# and use it anywhere inside model
if self.happy?
# do something
end
您可能想要在users表中检查快乐值。如果成功保存了值,并且您不想在posts表中存储happy状态,只需更正字符串比较运算符,请使用:
if self.happy == "yes"
# do something
end
答案 3 :(得分:0)
attr_accessor:快乐
如果self.happy ==&#34;是&#34;
做点什么
否则
做点什么
端