Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 如何在视图中查看RoR控制器实例变量?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在视图中查看RoR控制器实例变量?

Ruby on rails 如何在视图中查看RoR控制器实例变量?,ruby-on-rails,Ruby On Rails,我有一个表项目,每个项目有0个或更多类别。在我的视图中,我希望显示0个项目,直到出现与每个类别相关联的JQuery单击事件——即,当用户单击“食品”时,我希望显示食品类别的所有项目;当用户单击“照片”时,我想同时显示食物和与照片相关的项目 因此,在jQuery单击事件中,我定义了一个ajax调用: params = 'category_name=' + cat; $.ajax({ url: "/projects_controller/filter_list", data: params

我有一个表项目,每个项目有0个或更多类别。在我的视图中,我希望显示0个项目,直到出现与每个类别相关联的JQuery单击事件——即,当用户单击“食品”时,我希望显示食品类别的所有项目;当用户单击“照片”时,我想同时显示食物和与照片相关的项目

因此,在jQuery单击事件中,我定义了一个ajax调用:

params = 'category_name=' + cat;
$.ajax({
  url: "/projects_controller/filter_list",
  data: params
})
其中“cat”是所选类别的名称(格式为“食品摄影杂志等”)

在我的项目\u控制器中,我启动了一个过滤器\u列表方法:

def filter_list
    @categories = []
    words = params[:category_name].split(/\W+/)
    words.each { |word| @categories.push(Category.where("name = ?", word))  }
   @projects = ...
end
但现在我被卡住了。1) 如何获取与@categories中任何类别关联的所有项目?2)如何在视图上显示@projects变量?现在我只是显示如下:

<% Project.all.each do |project| %>
              <tr style="display:none" class="project <% project.categories.all.each do |cat| %><%= cat.name %> <% end %>">
                <td><%= project.filename %></td>
                <td><a href='project/<%= project.id %>'><%= project.location %></a>
                <td><% project.categories.all.each do |cat| %><%= cat.name %>, <% end %></td>
            <% end %>

, 

您的实例变量$categories、@项目已在视图中可用。因此,在视图中,您可以使用
@project
而不是访问类
project
本身

<% @projects.each do |project| %>
  ...
<% end %>

...
但可能您没有正确设计模型。在您的模型中建立正确的模型。如果项目属于某个类别,则可以按如下方式将其关联:

#models/category.rb
class Category < ActiveRecord::Base
 has_many :projects
end

#models/project.rb
class Project < ActiveRecord::Base
  belongs_to :category
end

#controllers/categories_controller.rb
def index
  @categories = Category.all #or use your own query
end

#views/categories/index.erb
<% @categories.each do |category| %>
  # here you can get all projects under this category using 
  # category.projects
<% end %>
#models/category.rb
类类别
注意:我已经习惯HAML,如果我的ERB语法错误,很抱歉控制器
类的相应视图可以访问类级实例变量(即
@my_variable


只需将
@projects=Project.all.each
放在控制器中,并在您的视图中将
Project.all
替换为
@projects

我尝试了这一点,但该行出现了错误“未定义方法`each'for nil:NilClass”。请检查我更新的答案,其中包含更多信息和传统模型设计示例AHH,这是有道理的。非常感谢!!我尝试了这一点,得到了该行的错误“undefined method`each'for nil:NilClass”,然后
项目。所有的
都返回您试图迭代的
nil
。你忘了在
projects
中有一个s或者任何类似的打字错误吗?我发现了——我在控制器中用错误的定义定义了@projects。愚蠢的但是非常感谢你@user1436111在进行ajax调用时也要小心,看起来您没有为json请求设置任何响应。(即,在控制器中定义一个
respond_to do | format | format.json{render json:@projects}
来响应json请求)