【问题标题】:How do I create a link to a specific Post object in a Rails view?如何在 Rails 视图中创建指向特定 Post 对象的链接?
【发布时间】:2010-12-19 08:40:59
【问题描述】:

我是 Rails 新手,所以请原谅任何简单的问题。我已经开发了一个博客,并且正在做一些定制。只是好奇,如果我想在我的 index.html.erb 页面上呈现一个特定的帖子是可能的。例如,如果我创建一个帖子,标题:Cool Post,并且它在表中的 post_id 为 25,我可以在我的索引页面中调用该特定帖子来呈现吗?

【问题讨论】:

    标签: ruby-on-rails ruby blogs render


    【解决方案1】:

    很难准确地说出您的系统是如何设置的,但在 Rails 中“正确”的做法是为您的页面执行类似于 Controller 中的操作:

    def index
       @post = Post.find(25)
    
       ... Your other code here ...
    end
    

    您可以在index.html.erb 中输出帖子:

    <h2><%= h(@post.title) %></h2>
    <%= h(@post.body) %>
    

    当然,我完全猜测您@post 上的字段

    编辑:如果您只想渲染@post,您仍然需要检索要在控制器中渲染的帖子,但是您将需要使用部分渲染它来自index.html.erb 文件:

    1. 假设,在您的 app/views/posts/ 目录中创建一个 _post.html.erb 文件,并在其中放置您想要的任何渲染代码(或从现有的 app/views/posts/index.html.erb 文件中抽象它。_注意:请参阅部分中的帖子使用局部变量 post 而不是 @post 以获得最大的灵活性。

    2. 然后在您的index.html.erb 中调用它,如下所示:

      'posts/post', :object => @post %>

    此调用假定 index.html.erb 文件与 _post.html.erb 部分文件不在同一目录中。

    【讨论】:

    • 注意为什么你有一个 ;在您的Post.find(25) 之后,输出h 的更简洁的方法是&lt;%=h @post.something %&gt;。否则这很好。
    • @Garret,分号是因为我最近在 JavsScript 和 PHP 中编码过多:) 对于 h 函数,我认为所有函数调用在 Ruby 1.9 中都需要有括号。我错了吗?
    【解决方案2】:

    我认为他的问题是关于渲染/重定向。 您应该这样做(作为控制器的最后一行)

    render @post
    

    redirect_to @post
    

    第一个显示帖子,第二个显示创建/更新后的帖子。

    【讨论】:

    • 谢谢,我没有从他的问题中明白这一点……但我又看了一遍,你是对的。我更新了我的问题以包含更多细节。希望对他有帮助!
    【解决方案3】:

    虽然 dcneiner 的解决方案在技术上是正确的,但 Rails 的方式不是硬编码这些东西。博客投入使用后,您必须直接修改源代码才能更改此帖子。不建议这样做。

    我建议您在帖子表中添加一个额外的列,以指示帖子是否应永久显示在首页上。这使您可以在创建永久帖子时动态更新您的永久帖子。

    例如:

    class Post < ActiveRecord
      named_scope :featured, :conditions => {:featured => true},
       :order => "created_at DESC"
    end
    

    Post.featured 将返回您的精选帖子以在您的首页上使用,按最新到最旧的顺序排列。

    如果您一次只想要一个精选帖子,您可以将以下内容添加到帖子模型中

      before_validation :highlander_clause
    
      def highlander_clause
        Post.featured.each{|p| p.update_attribute(:featured, false) if featured
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2021-06-05
      • 2016-05-11
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多