通过数据库设置值设置radio_button_tag值的任何可能方法

时间:2011-01-25 17:58:59

标签: ruby-on-rails-3

我在表单中有一个radio_button_tag,它包含当前可用性的各种值:

Mike Donnall o O o off of office o Vacation

所以最初打开表单,然后选择一个值,然后设置该Person的Status表中的值。

但是,还可以重新打开表单并更新其当前状态,可能是从Vacation到Available。

我的问题是,无论如何都有单选按钮:已检查可以修改为接受自定义方法,我在类似的帖子中找到了一些东西,但我想要将单选按钮设置为值的值foe在DB中。

到目前为止,我的代码可能在黑暗中刺伤:

查看:

<% @people.each do |p| %>
    <% @statuses.each do |s| %>
        <%= "#{p.name}" %>
        <%= "#{s.status_name}" -%><%= radio_button_tag ['person', p.id], ['status',     
             s.id], checked?(p.id) %>
 <% end %>
<% end %>

助手:

def checked?(person)
    @person = person
    @status = Status.find_by_sql(['select status_id from statuses where person_id = ?, @person])

    if @result
 return true

正如你所看到的,我有点迷失在这里,但我知道该方法应该返回需要检查的复选框的值,但我想知道因为它是一个经过检查的功能,它只会被限制为一个真实的还是假的?

因此,对于persons.status.id,请检查其是真还是假。

1 个答案:

答案 0 :(得分:1)

从你的助手的SQL看来,你在人和状态之间建立了以下关系:

class Person < ActiveRecord::Base
  has_one :status
end

class Status < ActiveRecord::Base
  belongs_to :person
end

您可以像这样访问一个给定人员状态:

person = Person.first
person_status = person.status

使用这些知识,您期望的视图结果变得非常简单:

<% @people.each do |p| %>
  <p><%= "#{p.name}" -%>
  <% @statuses.each do |s| %>
    <%= "#{s.status_name}" -%>
    <%= radio_button_tag ['person', p.id], 
                         ['status', s.id],
                         (p.status == s) ? true : false %>
  <% end %>
<% end %>

您当然可以将逻辑提取给帮助程序,但这似乎没有必要。

就个人而言,这不是我向用户提供信息的方式,它对一行中的信息过于沉重。我建议您将此人的姓名放在p标记中,并使用ul标记表示状态。