红宝石检查数据库中是否存在数据

红宝石检查数据库中是否存在数据

问题描述:

即时通讯新的红宝石在轨道上,我再次被*的东西真的和上次一样..我有一个用户表,课程表和标记表。 我可以用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不存在!

感谢您的帮助!

+0

_ _ “作为最后一次类似的” - 你指的是另一个问题?如果是这样,请提供链接。 – Stefan

+0

是的另一个是这样的:[这里](https://*.com/questions/43348313/rails-check-if-relationships-exist-in-database) –

+0

'@ mark'包含'course_id'和'user_id '。所以你可以写'if @ mark.course_id == @ course.id && @ mark.user_id == user.id' –

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

例如,根据您的模型关联,马克belongs_to课程和用户。 Rails会建立在你的马克模型下面的实用方法:

@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 %> 
+0

谢谢你的回答!但是,如果我想用@ mark.course作为例子,那么我在控制器中拥有什么?其实我有'@mark = Mark.where(course_id:params [:id])',但这是一个数组:/ –

+0

@ValentinFerey .where将始终返回一组记录。另外,单个课程可以有多个标记,因此它可以返回课程标记数组。你必须遍历每一个并显示一个表单。检查我更新的答案。 – Aph

+0

WoooW!非常感谢 !!当然,我是新的唯一的解决方案,但我不知道“除非”标签!有了这个,我可以解决我所有的问题!非常感谢 !我从来没有听说过,除非在ROR之前...... –

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

关于你的问题,你想知道是否存在属于特定用户的特定历程的标志,所以你需要像这样:

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

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

+0

这可以工作,但我的User_id不是current_user!这是本课程中每个用户的ID,这需要一个.each方法... –