Ruby on rails 如何在视图中查看RoR控制器实例变量?
我有一个表项目,每个项目有0个或更多类别。在我的视图中,我希望显示0个项目,直到出现与每个类别相关联的JQuery单击事件——即,当用户单击“食品”时,我希望显示食品类别的所有项目;当用户单击“照片”时,我想同时显示食物和与照片相关的项目 因此,在jQuery单击事件中,我定义了一个ajax调用: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
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请求)