[英]if statement on select
我有一個帶有是或否選擇表單的表單
<%= 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
如何檢查用戶選擇是還是否?
您可以從表單中的params
獲取選定的值
如果您的表單如下所示:
<%= form_for @resource do |f| %>
<%= f.select :happy, ['Yes', 'No'], {}, :class => 'form-control' %>
<% end %>
然后,您可以在控制器中獲得選定的值,如下所示:
if params[:resource][:happy] == 'Yes'
do something....
end
如果您希望在模型中執行某些操作,則只需調用模型中的方法並將params
值作為參數傳遞,然后進行其余工作即可。
好吧,猜猜快樂是一個string
嗎? 我想說帶有雙等號的解決方案應該可以工作。
如果確實是boolean
,我相信您可以執行以下操作:
<%= f.select :happy, [['Yes', true], ['No', false]], {}, :class => 'form-control' %>
現在我有點偏執,它將被解釋為一個string
,如果是這樣,您可能必須使用雙等號進行一些控制器檢查。
剛檢查過,我的解決方案使用boolean
對我boolean
。
如果需要,您可以構建演示者,裝飾者,以在整個應用程序中啟用此功能。
MVVM試圖完成的任務,減少了所需的轉換和粘合代碼量。
我強烈建議您為是/否數據使用boolean
,因為它可以用true / false表示。 存儲string
,然后執行檢查還意味着將string
.downcase
或.upcase
以確保檢查在.upcase
的時候通過。
如果您是在不進行轉換的情況下從select_tag
保存數據(即"Yes"
),則檢查happy == "yes"
是否為false
。
使用boolean
完全可以消除該問題。
thing.update(thing_params)
if.happy?
do something here
end
我認為用戶應該對帖子感到滿意還是不滿意。 (並且您也有用於發布的表單,而不是用於用戶的表單。)
因此,您應該在用戶表中而不是帖子表中存儲幸福狀態。 否則,每當用戶提交新帖子時,它將被重寫。 否則,如果您只想在用戶模型中存儲最后的快樂狀態,則應該使用PostsController收集快樂字段並將其手動保存到用戶模型中。
無論如何,最好的方法是將所有快樂狀態存儲在帖子表中,並僅選擇最后一個。 因此,幸福狀態的歷史將是完整的,並且您始終可以將幸福狀態與適當的職位相關聯。
您的用戶模型實現應如下所示:
# 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
您可能要檢查用戶表中的快樂值。 如果值已成功保存,並且您不想將幸福的狀態存儲在posts表中,則只需更正字符串比較運算符,請使用:
if self.happy == "yes"
# do something
end
attr_accessor:快樂
如果self.happy ==“是”
做一點事
其他
做一點事
結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.