ruby检查数据库中是否存在数据

时间:2017-04-12 12:41:16

标签: mysql ruby-on-rails ruby activerecord

我是新的ruby on rails并且我再次阻止了与上次非常相似的东西..我有一个User表,一个Course表和一个Mark表。 我可以使用user_id,course_id和成绩创建标记。

在我的模特中,我有:

/* Mark model */
class Mark < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
end

/* Course model */
class Course < ActiveRecord::Base
  has_many :marks
end

/* User model */
class User < ActiveRecord::Base
  has_many :marks
end

所以我想要做的就是当我创建一个新标记时,我希望我的表单消失并显示一个按钮销毁!像这样:

<% if @mark.course_ids.include?(@course.id) and @mark.user_ids.include?(user.id)
   # Button destroy
<% else %>
   <%= form_for Mark.new do |f| %>
       <%= hidden_field_tag :course_id, @course.id %>
       <%= hidden_field_tag :user_id, user.id %>
       Grade: <%= number_field_tag :grade, nil, min: 0, max: 100 %>
       <%= f.submit %>
    <% end %>
<% end %>

目标是在以前添加标记时避免使用表单。 但是这里显然不存在@ mark.course_ids和@mark.user_ids !!

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

首先,我建议你重新考虑你的表格,或者看看多对多的关系。

关于您的问题,您想知道是否存在属于特定用户的特定课程的标记,因此您需要以下内容:

Mark.where(course_id: @course.id, user_id: current_user.id).any?

如果存在这样的记录,则返回true。

答案 1 :(得分:0)

belongs_to关联与其他模型建立一对一连接。然后,Rails在模型中创建一个单一的实用方法(等等)。

例如,根据您的模型关联,标记 belongs_to 一个课程和一个用户。 Rails将在Mark模型中创建以下实用程序方法:

@mark.course
@mark.user

所以声明:

@mark.course_ids.include?(@course.id) and @mark.user_ids.include?(user.id)

不正确。 Mark模型中不存在这些方法。

试试这个:

<强>控制器

@marks = Mark.where(course_id: params[:id])

这将获得该课程的所有分数,因此该分数肯定会有与之相关的课程(您无需在视图中进行检查)。

查看

为每个标记呈现一个表单:

<% @marks.each do |mark| %>
  <% unless mark.user.exists? %>
    <%= form_for Mark.new do |f| %>
      <%= hidden_field_tag :course_id, @course.id %>
      <%= hidden_field_tag :user_id, user.id %>
      Grade: #{number_field_tag :grade, nil, min: 0, max: 100}#{f.submit}
    <% end %>
  <% end %>
<% end %>