簡體   English   中英

如果選擇語句

[英]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試圖完成的任務,減少了所需的轉換和粘合代碼量。

編輯2

我強烈建議您為是/否數據使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM