基本上我想要它,以便在您登录时我的视图中,只有您是创建它们的人才能查看与该项目关联的项目和资产。这是我现在的控制器:
class ProjectsController < ApplicationController
before_filter :authenticate_user!
def show
@project = Project.find(params[:id])
end
def new
@project = Project.new
end
def create
@project = Project.new(project_params)
@project.user_id = current_user.id if current_user
if @project.save
flash[:notice] = "Name successfully added."
redirect_to(@project, :action => 'show')
else
render(:action => 'new')
end
end
private
def project_params
params.require(:project).permit(:name, :id, :user_id)
end
end
另外,由于我的用户has_many项目和项目has_many资产和项目都有user_id列和索引,这是否意味着创建的资产自动与该用户关联,或者我是否还需要将user_id添加到资产。
我说这个的原因是因为我希望能够在我看来:
#views/projects/show.html.erb
<% current_user.assets.each do |f| %>
<%= f.name %>
<%= f.url %>
<% end %>
或类似的东西。
此外,如果在同一页面上我想添加一个创建新资产按钮,我需要创建一个带有创建操作的资产控制器,或者我可以将它放在项目控制器中。
答案 0 :(得分:3)
您要做的是范围Project
到current_user
,如下所示:
class ProjectsController < ApplicationController
before_filter :authenticate_user!
def show
@project = current_user.projects.find(params[:id])
end
def new
@project = current_user.projects.build
end
def create
@project = current_user.projects.build(project_params)
if @project.save
flash[:notice] = "Name successfully added."
redirect_to(@project, :action => 'show')
else
render(:action => 'new')
end
end
private
def project_params
# removed :user_id for security reasons (see below)
params.require(:project).permit(:name, :id)
end
end
另外,因为我的用户有很多项目和项目has_many资产和 projects有一个user_id列和索引,这是否意味着创建了一个 资产自动与该用户关联,或者我是否需要添加 user_id也是资产。
为此,请使用has_many through:
-
class User
has_many :projects
has_many :assets, through: :projects
end
另外,如果我想在projects / show.html.erb中创建一个新资产 看,我会用新方法创建一个资产控制器吗? 然后将按钮路由到该方法?或者我可以在里面这样做 项目控制员?
为此,您可以在accepts_nested_attributes_for
模型中使用Profile
:
class Profile
accepts_nested_attributes_for :assets
end
然后更新您允许的project_params
:
def project_params
params.require(:project).permit(:name, :id, assets_attributes: [:etc])
end
几个笔记。使用应该可访问的assets_attributes: [:etc]
属性更新Asset
。可能是:name
,:file
等。其次,请注意我已删除:user_id
。这是一个非常重要的概念。允许:user_id
表示可以使用该属性注入表单。在这种情况下,它允许用户将创建的Project
分配给他们喜欢的任何用户。