【发布时间】:2010-06-11 16:12:47
【问题描述】:
现在我正在 Rails 中构建一个项目管理应用程序,这里有一些背景信息:
现在我有 2 个模型,一个是用户,另一个是客户端。 Clients 和 Users 是一对一的关系(client -> has_one 和 user -> belongs_to 表示它在 users 表中的外键)
所以我想要做的是,一旦您添加了客户端,您实际上可以向该客户端添加凭据(添加用户),为此,所有客户端都显示在该客户端名称旁边的链接中这意味着您实际上可以为该客户端创建凭据。
我不知道该怎么做,如果您在数据库中确实有凭据(这意味着用户表中有一条带有您的客户端 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
但它只是将链接放在用户表中每条记录的次数。有什么帮助吗?
【问题讨论】:
-
您确定问题不只是因为您使用的是赋值 '=' 而不是测试相等性 '==' 吗? if user.client_id == client.id 而不是 if user.client_id = client.id
-
现在我正在努力解决另一个问题......我目前正在添加凭据,但实际上并未进入控制器的“显示”方法,而是使用将 client_id 传递给用户以这种方式建模: 'user', :action => 'new', :client_id => client.id} %> 将所有内容添加到用户控制器的正确方法是什么?如果我使用 @user = User.new(:user) 它不会加载 client_id,如果我使用 @user = User.new(:client_id => params[:client]) 也不会加载它。跨度>
-
你应该像这样创建用户:
User.new(:client_id => params[:client_id]) -
你确定你使用的是
params[:client_id]吗?因为你之前发过params[:client]。 -
是的,这是我的控制器: def create @user = User.new(:client_id => params[:client_id]) if @user.save flash[:notice] = "Credentials created" else flash [:error] = "凭据创建失败" end end
标签: ruby-on-rails ruby view controller erb