2011-03-10 59 views
1

我在我的Rails 3应用程序中使用简单导航gem。它工作正常,除了一个小怪癖。在Rails 3中使用简单导航gem会在渲染上显示适当的菜单:create

我有一个包含菜单的第二层级上的侧边栏DIV,那得到的显示!render_navigation(:level => 2).nil?

它的工作除了在一个特殊的情况下,罚款。比方说,我有一个模型ContactAttempt。一个普通用户(即使他们没有登录)可以创建一个新的ContactAttempt,在控制器中保存记录,然后将通知邮件发送给相应的部门。 此外,管理员能够列出所有记录(索引)并查看每一个(显示),编辑和更新都被禁用。这只是一个联系表单,除了恶意原因之外,不需要编辑或更新记录。

这里是我的导航是如何设置,现在(从navigation.rb)

primary.item :contact_us, 'Contact Us', new_contact_attempt_path do |secondary| 
    secondary.item :send_email, 'Send Email', new_contact_attempt_path 
    if user_signed_in? and current_user.admin? 
    secondary.item :list_contact_attempts, 'List of Contact Attempts', contact_attempts_path 
    end 
end 

我的问题是,当用户尝试提交信息不通过验证(如不回复电子邮件,或消息包含非法字符),表单再次显示所有错误。但即使你的current_action == "create",实际的网址变成"localhost:3000/contact_attempts。这意味着为了简单导航它看起来像路径是contact_attempt_path,并且不会生成secondary.item:new_contact_attempt。我试图使用highlights_on => /contact_attempts来解决这个问题,它强制在所有视图上生成项目,但随后它会在所有操作中突出显示所有时间 - 这是令人困惑的。

有没有人有任何想法如何解决它?

编辑

好,我能想出一个办法来实现我想要的东西 - 但它似乎很麻烦,我真的不喜欢它:

primary.item :contact_us, 'Contact Us', new_contact_attempt_path do |secondary| 
    if user_signed_in? and current_user.admin? 
    if params[:action] == ("create" or "new") 
     secondary.item :send_email, 'Send Email', new_contact_attempt_path, :highlights_on => /contact_attempts/ 
     secondary.item :list_contact_attempts, 'List of Contact Attempts', contact_attempts_path, :highlights_on => /contact_attempts\/index/ 
    else 
     secondary.item :send_email, 'Send Email', new_contact_attempt_path 
     secondary.item :list_contact_attempts, 'List of Contact Attempts', contact_attempts_path 
    end 
    else 
    secondary.item :send_email, 'Send Email', new_contact_attempt_path, :highlights_on => /contact_attempts/ 
    end 
end 

我会将此标记为明天回答,如果没有人回来,有适当的解决方案。 :-(

回答

4

好,我能想出一个办法来实现我想要的东西 - 但它似乎很麻烦,我真的不喜欢它:

primary.item :contact_us, 'Contact Us', new_contact_attempt_path do |secondary| 
    if user_signed_in? and current_user.admin? 
    if params[:action] == ("create" or "new") 
     secondary.item :send_email, 'Send Email', new_contact_attempt_path, :highlights_on => /contact_attempts/ 
     secondary.item :list_contact_attempts, 'List of Contact Attempts', contact_attempts_path, :highlights_on => /contact_attempts\/index/ 
    else 
     secondary.item :send_email, 'Send Email', new_contact_attempt_path 
     secondary.item :list_contact_attempts, 'List of Contact Attempts', contact_attempts_path 
    end 
    else 
    secondary.item :send_email, 'Send Email', new_contact_attempt_path, :highlights_on => /contact_attempts/ 
    end 
end 

我会纪念这个作为回答明天,如果没有人回来了妥善解决。:-(

似乎是最好的解决方案,现在,因为它没有在创业板实现。在GitHub上的安迪(创造者)开了罚单。