【问题标题】:How can I dynamically call the named route in a :partial in rails?如何在rails中的:partial中动态调用命名路由?
【发布时间】:2010-05-29 07:34:52
【问题描述】:

我有以下部分。它可以在视图中从三个不同的时间调用,如下所示:

 <%= render :partial => "contact_event",
     :collection => @contacts,
        :locals => {:event => email} %>

第二次:

 <%= render :partial => "contact_event",
     :collection => @contacts,
        :locals => {:event => call} %>

第三次:

 <%= render :partial => "contact_event",
     :collection => @contacts,
        :locals => {:event => letter} %>

在每种情况下,电话、电子邮件、信件均指模范电话、​​电子邮件或信件的特定实例。

这是我尝试做的,从概念上讲我想做的事情:根据已从 :partial 传递给 :event 的类名分配路由。

我所做的是创建实际的 url 应该是什么。它的“文本”是正确的,但似乎没有将其识别为命名路线。

 <!-- provide a link to skip this item -->
 <% url = "skip_contact_#{event.class.name.tableize.singularize}_url" %>
 <%= link_to_remote "Skip #{url} Remote",
    :url => send("#{url}(contact_event, event)")
    :update => "update-area-#{contact_event.id}-#{event.id}" %>
 <span id='update-area-<%="#{contact_event.id}-#{event.id}"%>'> </span>

上面的结果:当事件被传递给一个电子邮件实例时,例如,它说:

skip_contact_email_url 不是方法。

url 是对的,但它不能识别为方法。

  1. 如果局部变量是字母,如何动态定义skip_contact_email_url为skip_contact_letter_url?

  2. 更好的是,我怎样才能拥有一个可以执行适当操作的命名路由?

【问题讨论】:

    标签: ruby-on-rails dynamic routes


    【解决方案1】:

    您可以使用polymorphic_url。它根据物品类型生成相应的路由:

    编辑:路由是根据记录的类生成的,所以如果你通过:event =&gt; call:event =&gt; email,它会这样工作:

    # event.class == Email
    polymorphic_url([contact_event, event], :action => :skip)
    #=> /contact_events/:contact_event_id/emails/:id/skip
    
    # event.class == Call
    polymorphic_url([contact_event, event], :action => :skip)
    #=> /contact_events/:contact_event_id/calls/:id/skip
    

    等等。

    编辑2: 路线:

    map.resources :contacts do |contact|
      contact.with_options :member => {:skip => : ... [get/post - what you have] } do |c|
        c.resources :letter
        c.resources :emails
        c.resources :calls
      end
    end
    

    【讨论】:

    • 事件的值来自 :locals 散列
    • 是的,您将任何 ActiveRecord 对象分配为:event,然后使用它。见编辑。
    • 好吧,这很有趣——虽然我有点晕头转向……但我认为这是这样做的方法。我如何创建路线,但要使其正常工作?
    • 哦,等等,所以如果我发电子邮件,调用嵌套在一个名为contact_events 的类中......是这个想法......?我目前还没有“contact_event”的概念——我用它来存储 Contact 的实例...
    • 查看路线编辑。我假设你有类ContactEmailLetterCall 和控制器EmailsControllerLettersControllerCallsController
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多