2013-08-23 100 views
0

我对Rails很陌生,做了一些教程,并且我没有web开发背景,所以提前道歉。将选项设置为单选按钮或常规按钮?

我创建了一个非常简单的应用程序,允许用户选择三个可用的状态更新之一。我应该将这三个状态更新存储为字符串还是整数?目前,我的Postgres数据库将状态存储为整数,但我也很好奇,如果有一种方法,我可以指定只能插入数字1,2或3。

第二个问题:我想显示一个表单,显示为三个按钮,每个按钮对应一个特定的设置状态更新。我想让按钮在里面显示一个字符串,以便人们可读,但是状态更新对应于1,2或3.用户可以选择哪种状态,如果他们改变了主意,他们可以选择更改他们选择的状态在提交之前,一旦他们下定决心点击提交按钮。

我应该用单选按钮来完成这个吗?如果是这样,我应该如何使单选按钮显示文本,然后保存为整数?或者我应该只使用普通的按钮?

非常感谢!

UPDATE:

由于@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

请把你在这里试过的代码,以便你的问题可以准确地回答。 – Bot

回答

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> 
+0

不错,@Bot,确实有效!我花了一段时间才弄明白这一点。那么我怎么会在列出我的状态的索引页面上显示状态的人类可读形式? 'status.status'只显示数字 - 我如何将它指向我定义的散列? –

+0

谢谢@Bot。但是我在哪里放置了这行代码? –

+0

更新了答案。 – Bot