在我的应用程序中,我有一个带单选按钮的表单:
<%= form_for @homework.homework_students.homework_ratings do |f| %>
<label>
<%= f.radio_button :fb_value, '1', :fb_type, 'Difficulty' %>
</label>
1
<label>
<%= f.radio_button :fb_value, '2', :fb_type, 'Difficulty' %>
</label>
2
<label>
<%= f.radio_button :fb_value, '3', :fb_type, 'Difficulty' %>
3
</label>
<%= f.button :submit %>
<% end %>
目的是为表中的每个作业(不确定语法是否正确)填充两列(称为“值”和“类型”),称为“homework_ratings”,它与名为“homework_students”的表相关联:
homework_ratings.rb
belongs_to :homework_student, :class_name => 'HomeworkStudent', :foreign_key => :homework_student_id
homework_students.rb
has_many :homework_ratings, :class_name => 'HomeworkRating'
belongs_to :homework, :class_name => 'Homework', :foreign_key => :homework_id, dependent: :destroy
homework_students有许多作业:
homework.rb
has_many :homework_students, :class_name => 'HomeworkStudent', dependent: :destroy
homework_ratings表:
id :integer not null, primary key
# homework_student_id :integer
# type :integer
# value :string(255)
# created_at :datetime not null
# updated_at :datetime not null
homeworks_controller.rb
def show
@homework_ratings = HomeworkRating.all
...
end
简而言之,我试图在家庭作业中填写一张与家庭作业没有直接关联但通过homework_students间接关联的表。
我在尝试加载页面时收到错误“undefined method homework_ratings”。
有关如何最好地接近此问题的任何想法?
谢谢,可以提供更多信息...
答案 0 :(得分:1)
简化。你正试图记录一份作业的评分,对吧?所以你创建一个专用的评级控制器,你只需创建一个评级。始终尝试从您正在创建的内容中创建资源。您的应用中应该有很多资源/控制器。
<%= form_for @homework_rating do |f| %>
<%= f.hidden_field :homework_student_id %>
在控制器中:
def new
@homework_student = HomeworkStudent.find params[:homework_student_id]
@homework_rating = @homework.ratings.new
end
你可能也希望看作has_many :through
编辑:您无法使用一个单选按钮设置两个值。但您可以在评级模型中创建一个编写器方法
def set_values=(val)
self.type = "foo"
self.value = "bar"
end
然后你可以在val上做各种各样的红宝石,比如if或case。你需要想出一种在单选按钮和模型动作之间进行通信的方法。