【问题标题】:RoR: How to populate table from radio buttons?RoR:如何从单选按钮填充表格?
【发布时间】:2017-04-09 05:45:15
【问题描述】:

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

<%= 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”的表(不确定上面的语法是否正确)中的每个作业填充两列(称为“value”和“type”),该表与名为“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 有很多作业:

作业.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 间接关联的家庭作业中填充表格。

我在尝试加载页面时收到错误“未定义的方法 homework_ratings”。

关于如何最好地解决这个问题有什么想法吗?

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

【问题讨论】:

  • 这不是答案,但是,我会使用 valuetype 以外的其他名称作为字段名称,因为它们将不可避免地与内置的 rails 方法发生冲突。

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


【解决方案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

编辑:你不能用一个单选按钮设置两个值。但是你可以在评级模型中创建一个 writer 方法

def set_values=(val)
  self.type = "foo"
  self.value = "bar"
end

然后您可以在 val 上执行各种 ruby​​,例如 if 或 case。您需要想出一种在单选按钮和模型操作之间进行通信的方法。

【讨论】:

  • 谢谢,我做了你的建议,但得到这个错误:“表单中的第一个参数不能包含 nil 或为空”。我正在加载作业中的显示视图。
  • 我正在根据您的指导尝试一些事情。我认为我的语法在单选按钮的形式上是错误的,尽管参数数量错误(2..3 为 4) - 这是在第一个单选按钮上......
  • 是的,因为您需要在呈现表单的任何操作中设置实例变量@homework_rating,在您的情况下,它显示不是新的。
  • 谢谢,在 homework_controller 中吗?我正在这样做,但收到此错误找不到带有 'id'= 的 HomeworkStudent
  • 我认为您需要做一些不太复杂的 Rails 概念,直到您了解所有部分的去向以及如何处理关联和表单。否则,这将演变为来回聊天:/
猜你喜欢
  • 2012-03-19
  • 2012-05-12
  • 2013-05-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2011-12-25
  • 2020-10-27
相关资源
最近更新 更多