Rails 本以为 Rails 容易,现在看也不容易呀,循环生成菜单时遇到问题

hunkguo · 2013年03月01日 · 最后由 jasl 回复于 2013年03月06日 · 3742 次阅读

model 已经搞定,通过 has_one 关联了几张表。 现在在 view 中循环输出二级菜单,是不是还得定义路由中的资源等才能用? rails 高级是高级了,所有都得从头学习呀。

楼主是想问这个吗?

resources :level1 do
  resources :level2 
end

#1 楼 @jjzxcc 其实我对 resources 还不太理解,只是看到代码中使用,实现效果,还没能把各部分串起来。

二级菜单不一定要二级路由啊。。。

#3 楼 @badboy 那请问,一向是怎么处理的?循环的时候,刚学,迷迷糊糊的。

菜单是菜单,路由是路由 一张表也可以,两张表也可以 假设用一张表 operates,然后加字段,parent_id,url,title: 然后自关联 has_many :children, :class_name => 'Operate', :foreign_key => 'parent_id' belongs_to :parent, :class_name => 'Operate', :foreign_key => 'parent_id'

然后呢,action 里你要把 @operates = Opeare.find(:all,:controller=>"parent_id IS NULL")

最后呢,view 里就

<% @operates.each do |operate|%> <%= link_to operate.tilte,operate.url %> #主菜单样式你自己弄 <% operate.children do |children|%> <%= link_to operate.tilte,operate.url %> #二级菜单样式你自己弄 <% end unless operate.children.blank?%> <% end %>

直接手敲的,可能有错,以前的菜单也类似这样做的,嘿嘿,只是给你简单的点一下。 具体你可以考虑把菜单缓存起来,不用每次都去查

#5 楼 @badboy 谢了,大体上明白你的意思了,用好 rails 还得下功夫。

#5 楼 @badboy 能给个两张表的关联及调用方法不?试验了下,还是没调通。

你的代码 这两句,没理解 <%= link_to operate.tilte,operate.url %> #二级菜单样式你自己弄 <% end unless operate.children.blank?%>

二级菜单?试试这个 gem ancestry

@jasl对于刚学习的新手不适合直接上 gem 哈

#9 楼 @NonTwitter 同意,准备使用 bootstrap,使用 gem 痛苦死,最后还是直接引入 css js 文件简单。

@hunkguo 额,我不是这意思。。。bootstrap 我一直用 gem, 感觉很方便,我只是说新手学习的时候应该更多考虑实现原理,而不是靠套用 gem 来回避。。。

@NonTwitter 啊哈 @hunkguo 级联菜单的最佳实践 原理参考《SQL 反模式》

需要 登录 后方可回复, 如果你还没有账号请 注册新账号