2017-04-12 149 views
0

即時通訊新的紅寶石在軌道上,我再次被封鎖的東西真的和上次一樣..我有一個用戶表,課程表和標記表。 我可以用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://stackoverflow.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' –

回答

0

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之前...... –

1

首先,我建議你重新考慮你的表格,也許看看多對多的關係。

關於你的問題,你想知道是否存在屬於特定用戶的特定歷程的標誌,所以你需要像這樣:

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

這將如果返回true這樣的記錄存在。

+0

這可以工作,但我的User_id不是current_user!這是本課程中每個用戶的ID,這需要一個.each方法... –