Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何从另一个控制器访问实例变量?_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 如何从另一个控制器访问实例变量?

Ruby on rails 3 如何从另一个控制器访问实例变量?,ruby-on-rails-3,Ruby On Rails 3,所以我有两个模型和控制器。项目和设计师 在我的设计器索引视图中,我希望它显示设计器拥有的所有项目的列表 但是,当我执行以下简单查询时: <% @projects.each do |project| %> <tr> <td><%= link_to 'Show', project %></td> <td><%= link_to 'Edit', edit_project_path(project) %&g

所以我有两个模型和控制器。项目和设计师

在我的设计器索引视图中,我希望它显示设计器拥有的所有项目的列表

但是,当我执行以下简单查询时:

<% @projects.each do |project| %>
  <tr>
    <td><%= link_to 'Show', project %></td>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
<% @designer.projects.each do |project| %>  

<% end %>
def index

  @projects = Project.where(:user_id => where ever you've stored your userid) 

end
但是,当我从projects视图中的index.html.erb文件中运行这段代码时,它工作得非常好

那么,我如何才能访问该控制器,或者至少从另一个控制器的视图访问数据呢?我是否必须向designers控制器中的索引对象添加项目变量(它在其中查询db)


谢谢。

想出了一个办法。我所要做的就是在designers控制器中添加一个实例变量:

@projects = Project.all
但是…那不是很干。是否有人有一个更优雅的“干式”解决方案,所以如果我想访问其他控制器中的其他变量,我可以轻松地做到这一点,而不必在当前控制器中重新创建它们


谢谢。

想出了一个办法。我所要做的就是在designers控制器中添加一个实例变量:

@projects = Project.all
但是…那不是很干。是否有人有一个更优雅的“干式”解决方案,所以如果我想访问其他控制器中的其他变量,我可以轻松地做到这一点,而不必在当前控制器中重新创建它们

谢谢。

更新为使用单个设计器记录

你应该使用关联。将此添加到您的模型中

class Designer < ActiveRecord::Base
  has_many :projects
end

class Project < ActiveRecord::Base
  belongs_to :designer
end
类设计器 您的视图应该如下所示:

<% @projects.each do |project| %>
  <tr>
    <td><%= link_to 'Show', project %></td>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
<% @designer.projects.each do |project| %>  

<% end %>
def index

  @projects = Project.where(:user_id => where ever you've stored your userid) 

end

有关协会的更多信息,请点击此处:

更新为使用单个设计器记录

你应该使用关联。将此添加到您的模型中

class Designer < ActiveRecord::Base
  has_many :projects
end

class Project < ActiveRecord::Base
  belongs_to :designer
end
类设计器 您的视图应该如下所示:

<% @projects.each do |project| %>
  <tr>
    <td><%= link_to 'Show', project %></td>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
<% @designer.projects.each do |project| %>  

<% end %>
def index

  @projects = Project.where(:user_id => where ever you've stored your userid) 

end

有关协会的更多信息,请点击此处:

在designers控制器中,您需要将@projects实例变量仅设置为属于已登录设计器的项目,对吗

您将需要以下内容:

<% @projects.each do |project| %>
  <tr>
    <td><%= link_to 'Show', project %></td>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
<% @designer.projects.each do |project| %>  

<% end %>
def index

  @projects = Project.where(:user_id => where ever you've stored your userid) 

end

我希望这会有所帮助。

在designers控制器中,您需要将@projects实例变量设置为仅属于已登录设计器的项目,对吗

您将需要以下内容:

<% @projects.each do |project| %>
  <tr>
    <td><%= link_to 'Show', project %></td>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
    <td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
<% @designer.projects.each do |project| %>  

<% end %>
def index

  @projects = Project.where(:user_id => where ever you've stored your userid) 

end

我希望这能有所帮助。

你能链接模型和控制器吗?@r-dub,你的意思是在这里发布还是我能在Rails中链接它们?你能链接模型和控制器吗?@r-dub,你的意思是在这里发布还是我能在Rails中链接它们?@cowboycoded……你说得对。这不是我的意图。我只想登录与设计器关联的项目。不是系统上的所有项目。@cowboycoded….你是对的。这不是我的意图。我只想登录与设计器关联的项目。不是系统上的所有项目。我真正想要的是在每个设计师的“索引”页面上,也就是说,一旦他们登录,他们就会看到他们所有项目的列表。所以它与本例中的情况不完全相同。如果我没有弄错的话,您在这里添加的功能基本上允许有权限的人查看所有设计师及其所有项目,对吗?与一个设计师查看他们所有的项目不同。通常,您会使用索引操作来显示模型对象的列表,并且您会对单个对象使用显示操作,所以我认为您需要一个列表。答案更新为使用单个记录。我真正想要的是在每个设计师的“索引”页面上,也就是说,一旦他们登录,他们就会看到他们所有项目的列表。所以它与本例中的情况不完全相同。如果我没有弄错的话,您在这里添加的功能基本上允许有权限的人查看所有设计师及其所有项目,对吗?与一个设计师查看他们所有的项目不同。通常,您会使用索引操作来显示模型对象的列表,并且您会对单个对象使用显示操作,所以我认为您需要一个列表。答案更新为使用单个记录。