2010-06-11 73 views
1

現在我在rails中構建一個項目管理應用程序,下面是一些背景信息:如何將邏輯添加到視圖? Ruby on Rails

現在我有2個模型,一個是User,另一個是Client。客戶和用戶有一個一對一的關係(客戶端 - > HAS_ONE和用戶 - > belongs_to的,這意味着外鍵它在用戶表)

所以我想要做的,一旦你添加它的客戶端實際上可以向該客戶端添加憑據(添加用戶),爲了這樣做,所有客戶端都會顯示帶有該客戶端名稱旁邊的鏈接,這意味着您實際上可以爲該客戶端創建憑據。

我不知道該怎麼辦,如果你真的在數據庫中有證書(這意味着在你的客戶端ID的用戶表中有記錄),那麼不要顯示該鏈接。

這裏就是我認爲會工作

<% for client in @client%> 
    <h5> 
     <h4><%= client.id %></h4> 
     <a href="/clients/<%= client.id %>"><%= client.name %></a> 
      <% for user in @user %> 
      <% if user.client_id = client.id %> 
       <a href="/clients/<%= client.id %>/user/new">Credentials</a> 
      <%end%> 
      <% end %> 
    </h5> 
<% end %> 

而這裏的控制器:

def index 
@client = Client.find_all_by_admin(0) 
@user = User.find(:all) 
end 

而是它只是把該鏈接的數量乘以每個記錄在user表中。任何幫助?

+0

你確定問題不僅僅是你使用賦值'='而不是測試相等'=='嗎? if user.client_id == client.id而不是if user.client_id = client.id – 2010-06-11 18:52:59

+0

現在我正在努力處理另一個問題......我目前添加的憑證沒有真正進入「show」方法而是使用以下方式將client_id傳遞給用戶模型: <%= link_to「憑證」, {:controller =>'user',:action =>'new',:client_id => client.id}%> 將所有內容添加到用戶控制器的正確方法是什麼? 如果我使用@user = User.new(:user)它將不會加載client_id ,如果我使用@user = User.new(:client_id => params [:client])將不會加載它。 – Gotjosh 2010-06-11 19:14:17

+0

你應該像這樣創建用戶:'User.new(:client_id => params [:client_id])' – 2010-06-11 20:07:47

回答

1

你可以做以下

# controller 
def index 
    @clients = Client.find_all_by_admin(0, :include => :user) 
end 

# view 
<% @clients.each do |client| %> 
    <h5> 
     <h4><%= client.id %></h4> 
     <%= link_to client.name, {:action => 'show', :id => client.id} %> 

     <% if client.user.blank? %> 
     <%= link_to "Credentials", 
      {:controller => 'user', :action => 'new', :client_id => client.id} %> 
     <% end %> 
    </h5> 
<% end %> 

編輯

比較好的解決辦法,湊了控制器僅客戶誰目前尚不具備用戶:

# model 
class Client < ActiveRecord::Base 
    has_one :user 

    named_scope :without_user, 
     :conditions => "id NOT IN (SELECT client_id FROM users)" 
end 

# controller 
@clients = Client.without_user.find_all_by_admin(0) 

# view 
<% @clients.each do |client| %> 
    <h5> 
     <h4><%= client.id %></h4> 
     <%= link_to client.name, {:action => 'show', :id => client.id} %> 
     <%= link_to "Credentials", 
      {:controller => 'user', :action => 'new', :client_id => client.id} %> 
    </h5> 
<% end %> 
+0

非常感謝!第一個選項是正確答案,因爲我需要顯示所有的客戶端,我不想總顯示的是鏈接。欣賞快速準確的答案。 – Gotjosh 2010-06-11 18:31:12

+0

我很高興我可以幫忙:] – 2010-06-11 20:03:09

+0

你介意看看我的答案下面的評論? ( – Gotjosh 2010-06-11 20:03:58

1

剛添加到j。的答案,你真的應該使用link_to視圖助手,而不是硬編碼的URL。

+0

謝謝!現在就做, – Gotjosh 2010-06-11 18:08:50

1

我還沒有在某個時候使用Rails的工作,但兩件事情:

  1. 有幫手,讓您的網址,很容易犯錯誤。 (不是說我看到一個,而只是爲了讓你知道他們......)
  2. 視圖不應該有邏輯。儘可能多地把它放在控制器中。或者在模型中更好。
  3. 這是一個不使用「User.find:all」的好習慣,隨着您的應用程序的增長,這會殺死您。
  4. 最好在模型中有一個方法來獲取您將要使用的信息。在這種情況下數據庫更好地過濾。
+0

感謝您的支持!我真的很感謝他們讓我提高了我的鐵軌技巧!:) – Gotjosh 2010-06-11 18:08:02