我在表单中有一个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,请检查其是真还是假。
答案 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
标记表示状态。