RoR:如何从单选按钮填充表格?

时间:2016-11-24 21:14:20

标签: ruby-on-rails ruby-on-rails-4 radio-button

在我的应用程序中,我有一个带单选按钮的表单:

<%= 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”。

有关如何最好地接近此问题的任何想法?

谢谢,可以提供更多信息...

1 个答案:

答案 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。你需要想出一种在单选按钮和模型动作之间进行通信的方法。