我是Rails的新手,做了一些教程,而且我没有网络开发的背景,所以提前道歉。
我正在创建一个非常简单的应用程序,允许用户从三个可用状态更新中选择一个。我应该将这三个状态更新存储为字符串或整数吗?目前,我的Postgres数据库将状态存储为整数,但我也很好奇是否有一种方法可以指定只能插入数字1,2或3。
第二个问题:我想显示一个显示为三个按钮的表单,每个按钮对应一个特定的设置状态更新。我希望按钮在内部显示一个字符串,以便它是人类可读的,但是状态更新对应于1,2或3.用户可以选择哪个状态,如果他们改变主意,则更改他们选择的状态在提交之前,然后在他们下定决心后点击提交按钮。
我应该使用单选按钮来完成此操作吗?如果是这样,我应该如何使用单选按钮显示文本然后保存为整数?或者我应该使用普通按钮?
非常感谢!
更新
感谢@Bot,我能够创建一个哈希,为相应的状态整数定义人类可读的值,如下所示:
配置/ application.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
显示我创建的哈希值的人类可读值?
我使用脚手架来构建我的状态,因此状态控制器就是你所期望的。
答案 0 :(得分:0)
要在rails应用中使用基于键值对的字段,您需要先定义包含这些对的哈希。如果它在整个应用程序中保持不变,您可以使用config / application.rb文件来定义它。
module MyAppName
class Application < Rails::Application
INDENT_STATUSES = {1 => "DUE", 2 => "SHIPPING", 3 => "SHIPPED", 4 => "CLOSED"}.freeze
end
end
然后,如果您使用simple_form,则可以在表单中执行此类操作。
<%= 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 %>
在application.rb文件中添加任何内容后,不要忘记重新启动服务器。 希望它有所帮助。
<强>更新强>
现在要在显示页面中显示状态,您只需从哈希值中获取与状态键对应的值。
MyAppName::Application::INDENT_STATUSES[indent.status.to_i]
您可以直接在视图中使用它。
<td><%= MyAppName::Application::INDENT_STATUSES[status.status.to_i] %></td>
或者您可以在Model中定义方法。
class Status
#
#
def status_label
MyAppName::Application::INDENT_STATUSES[self.status.to_i]
end
end
并在视野中使用它。
<td><%= status.status_label %></td>