if语句选择

时间:2016-03-25 20:18:30

标签: ruby-on-rails ruby ruby-on-rails-4

我的表格中有是或否的选择表格

<%= 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

如何检查用户是否选择是?

4 个答案:

答案 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试图完成的任务,减少转换量和所需的粘合代码。

编辑2

我强烈建议使用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;

做点什么

否则

做点什么