红宝石检查数据库中是否存在数据
即时通讯新的红宝石在轨道上,我再次被*的东西真的和上次一样..我有一个用户表,课程表和标记表。 我可以用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不存在!
感谢您的帮助!
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 %>
谢谢你的回答!但是,如果我想用@ mark.course作为例子,那么我在控制器中拥有什么?其实我有'@mark = Mark.where(course_id:params [:id])',但这是一个数组:/ –
@ValentinFerey .where将始终返回一组记录。另外,单个课程可以有多个标记,因此它可以返回课程标记数组。你必须遍历每一个并显示一个表单。检查我更新的答案。 – Aph
WoooW!非常感谢 !!当然,我是新的唯一的解决方案,但我不知道“除非”标签!有了这个,我可以解决我所有的问题!非常感谢 !我从来没有听说过,除非在ROR之前...... –
首先,我建议你重新考虑你的表格,也许看看多对多的关系。
关于你的问题,你想知道是否存在属于特定用户的特定历程的标志,所以你需要像这样:
Mark.where(course_id: @course.id, user_id: current_user.id).any?
这将如果返回true这样的记录存在。
这可以工作,但我的User_id不是current_user!这是本课程中每个用户的ID,这需要一个.each方法... –
_ _ “作为最后一次类似的” - 你指的是另一个问题?如果是这样,请提供链接。 – Stefan
是的另一个是这样的:[这里](https://*.com/questions/43348313/rails-check-if-relationships-exist-in-database) –
'@ mark'包含'course_id'和'user_id '。所以你可以写'if @ mark.course_id == @ course.id && @ mark.user_id == user.id' –