【问题标题】:How can you assign an event object to an event id in this example?在此示例中,如何将事件对象分配给事件 ID?
【发布时间】:2009-10-08 06:49:34
【问题描述】:

我不知道这是 Ruby 问题还是 Rails 问题,但在 this example 在 Rails 中使用嵌套资源时,如何将事件对象分配给 event_id?事件对象似乎代表了比 event_id 更大的一组值。

<%= link_to 'Tickets', event_tickets_path(:event_id => @event) %>

【问题讨论】:

    标签: ruby-on-rails ruby variable-assignment


    【解决方案1】:

    以下语法应该有效:

    event_tickets_path(@event)
    

    【讨论】:

    • 实际上,我怀疑这行不通。名称“event_id”而不是“id”意味着这是一个外键,可能在连接表上,我认为 Rails 不会推断出 @event 应该映射到特定的外键 - 只映射到主键,因此需要 ":event_id => @event" 语法...如果我错了,请纠正我。
    【解决方案2】:

    这是 Rails 内置的一种便利。在幕后,它会发现你真的只是想要 id。请参阅link_to 的文档。这是它的一个例子:

    link_to "Profile", :controller => "profiles", :action => "show", :id => @profile
    # => <a href="/profiles/show/1">Profile</a>
    

    请注意,这里正在执行类似的操作,并且生成的 href 正在使用 ID。

    【讨论】:

    • 您引用的行上方的两行是:link_to "Profile", profile_path(@profile) 只要在您的路线文件中将事件声明为资源,您应该能够在埃德温在下面建议的方式。似乎更倾向于 RESTful 版本,因为它不那么脆弱,所以如果它很容易上手,我会推荐它。
    【解决方案3】:

    在这种情况下,Rails 调用 @event.to_param 并返回 id 属性 - to_param 默认执行此操作。您可以覆盖事件模型中的 to_param 方法以使其返回除 id 之外的其他内容。

    实际上并不是将事件对象分配给 event_id,而是分配 event.id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多