0

在我的项目中,我有两个模型,一个“治疗”模型和一个“类别”模型

class Category < ActiveRecord::Base
attr_accessible :typ
has_many :treatments
end  

class Treatment < ActiveRecord::Base
belongs_to :patient
belongs_to :category
attr_accessible :content, :day, :typ, :category_typ
end

所以在我的治疗表格中,用户还可以选择类别:

<div class="field">
<%= f.label :category_id %><br />
<%= f.collection_select :category_id, Category.find(:all), :id, :typ %>
</div>

我的问题是稍后我可以显示 category_id 但我真的不知道如何显示类别类型:

<% @patient.treatments.each do |treatment| %>
<tr>
<td><%= treatment.category_id %></td>
<td><%= treatment.content %></td>
<td><%= treatment.day %></td>
</tr>
<% end %>

我尝试了 category_typ,但没有奏效!我是rails的初学者,我希望有人可以帮助我!谢谢!

def show
@patient = Patient.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @patient }
end
end
4

3 回答 3

1

好的,它可以与

<td><%= treatment.category && treatment.category.typ %></td>,

也许有人知道为什么会这样?

于 2013-06-16T17:39:03.223 回答
1

你用treatment.category.typ.

您还需要@patient = Patient.where(:id => params[:id]).includes(:treatment => [:category]).first在您的控制器中。

于 2013-06-16T17:15:41.123 回答
1

它适用于

  <td><%= treatment.category && treatment.category.typ %></td>

因为某些处理对象的类别为零。如果治疗需要有一个类别,我会在模型级别进行验证,并在数据库上设置外键限制。

  class Treatment
    validates_presence_of :treatment
  end

然后在迁移中

  remove_column :treatments, :category_id
  add_column :treatments, :category_id, :null => false

这将确保您的数据库中的引用完整性。如果不需要该关系,则忽略此。您还可以使用 .try 进行代码 1 方法调用

 <td><%= treatment.category.try(:typ)%></td>
于 2013-06-16T17:51:33.770 回答