我对 Rails 很陌生,做了一些教程,而且我没有 Web 开发背景,所以提前道歉。
我正在创建一个非常简单的应用程序,它允许用户选择三个可用状态更新之一。我应该将这三个状态更新存储为字符串还是整数?目前,我的 Postgres 数据库将状态存储为整数,但我也很好奇是否有一种方法可以指定只能插入数字 1、2 或 3。
第二个问题:我想显示一个显示为三个按钮的表单,每个按钮对应一个特定的设置状态更新。我希望按钮在内部显示一个字符串,以便人类可读,但状态更新对应于 1、2 或 3。用户可以选择哪个状态,如果他们改变主意,可以更改他们选择的状态在提交之前,然后在他们下定决心后点击提交按钮。
我应该使用单选按钮来完成此操作吗?如果是这样,我应该如何使它在单选按钮显示文本的位置,然后另存为整数?还是我应该只使用普通按钮?
非常感谢!
更新:
感谢@Bot,我能够创建一个散列,将人类可读的值定义为相应的状态整数,如下所示:
配置/应用程序.rb:
module MyAppName
class Application < Rails::Application
INDENT_STATUSES = {1 => "DUE", 2 => "SHIPPING", 3 => "SHIPPED", 4 => "CLOSED"}.freeze
end
end
和_form.html.erb:
<%= simple_form_for(@status) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :status , :as => :radio_buttons ,:collection => MyAppName::Application::INDENT_STATUSES.keys, :label_method => lambda { |k| MyAppName::Application::INDENT_STATUSES[k]}, :item_wrapper_class => 'inline', :include_blank => false %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
但是在 index.html.erb 中,状态显示为数字而不是人类可读的版本:
<h1>Listing statuses</h1>
<table>
<tr>
<th>Status</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @statuses.each do |status| %>
<tr>
<td><%= status.status %></td>
<td><%= link_to 'Show', status %></td>
<td><%= link_to 'Edit', edit_status_path(status) %></td>
<td><%= link_to 'Destroy', status, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Status', new_status_path %>
如何status.status
显示我创建的哈希值的人类可读值?
我使用脚手架来构建我的状态,所以状态控制器是您所期望的。