【问题标题】:Refinerycms - Adding an image field to the blog engineRefinerycms - 向博客引擎添加图像字段
【发布时间】:2011-08-21 15:54:37
【问题描述】:

我有一个安装了社区博客引擎的refinerycms 应用程序。我想向 blog_post 添加一个图像字段,以便我可以为帖子选择一个主图像并将其显示在我的视图中。

我已经尝试添加一个图像字段,没有任何乐趣。然后我查看了我的其他一个带有图像字段的自定义引擎,它使用 image_id 链接到主图像表,所以我尝试添加一个 image_id 字段,并编辑 blog_post 模型以具有相同的“belongs_to”行。博客加载的编辑页面,图像选择器部分工作,但是当我点击保存时,似乎没有任何东西发送到我的表。

我担心的一件事是,当我使用图像字段创建自定义引擎时,我将其指定为字段类型图像。这似乎在后端创建了 image_id 字段,并设置了所有内容,以便我仍然可以引用图像类。向博客添加图像字段并没有这样做,只是创建了一个名为 image 的字段类型。在为我的自定义引擎检查表时,没有名为 image 的字段类型,所以在某处有一些我无法重新创建的转换魔法。

目前我有以下代码:

创建了这个迁移:

class AddPictureToBlog < ActiveRecord::Migration
 def self.up
   add_column :blog_posts, :main_image_id, :integer
 end

 def self.down
   remove_column :blog_posts, :main_image_id
 end
end

将此添加到 blog_post 模型中:

  belongs_to :main_image_id, :class_name => 'Image'

并在视图上显示:

    <%= f.label :main_image_id -%>
<%= render :partial => "/shared/admin/image_picker", :locals => {
      :f => f,
      :field => :main_image_id,
      :image => @blog_post.main_image_id,
      :toggle_image_display => false
    } %>

自定义引擎甚至没有引用 _id 字段,所以我不知道这里缺少哪些链接。任何帮助将不胜感激。这可能根本不是炼油厂的具体问题——我是 Rails 新手,所以这里可能缺少一些基础知识。

谢谢!

【问题讨论】:

  • 你想出解决方案了吗?我想做同样的事情:

标签: ruby-on-rails model refinerycms


【解决方案1】:

对于rails 3.2.3 和refinerycms 2.0.0,bleow 代码有效,

创建一个新的迁移:

rails generate migration add_image_id_to_refinery_blog_posts image_id:integer
rake db:migrate

在“decorators/refinery/blog/”下创建文件 post_decorator.rb

添加以下行,

Refinery::Blog::Post.class_eval do
  # Whitelist the :image_id parameter for form submission
  attr_accessible :image_id
  belongs_to :image 
end

生成炼油厂表格文件:

rake refinery:override view=refinery/blog/admin/posts/_form

并在“views/refinery/blog/admin/posts/_form.html.erb”中添加以下代码

<div class="field">
  <%= f.label :image_id %>
  <%= render :partial => "/refinery/admin/image_picker", :locals => {
    :f => f,
    :field => :image_id,
    :image => f.object.image,
    :toggle_image_display => false
  }
  %>
</div>

更多详情请参考链接extending-models

【讨论】:

  • 非常感谢。唯一的变化是迁移需要refinery_blog_posts。另外要获取表单文件,您可以运行rake refinery:override view=refinery/blog/admin/posts/_form
【解决方案2】:

这就是我最终做到的方式(但我已经在 ;) 中提出了功能请求):

创建一个新的迁移:

rails generate migration add_image_id_to_blog_posts image_id:integer
rake db:migrate

将此添加到 blog_post.rb 模型

attr_accessible :image_id
belongs_to :image

修改博客管理表单视图以包含以下内容:

<div class='field'>
  <%= f.label :image -%>
  <%= render :partial => "/shared/admin/image_picker", :locals => {
        :f => f,
        :field => :image_id,
        :image => f.object.image,
        :toggle_image_display => false
      } %>
</div>

那你应该可以走了! :)

【讨论】:

    【解决方案3】:

    您是否考虑过为此使用页面图像?

    https://github.com/resolve/refinerycms-page-images

    【讨论】:

      【解决方案4】:

      我将更新 rails 4.x 和 Refinery 3.x 的答案

      创建一个新的迁移,将新的 image_id 字段添加到 refinery_blog_posts 模型:

      rails generate migration add_image_id_to_refinery_blog_posts image_id:integer
      

      然后运行迁移:

      rake db:migrate
      

      现在您需要在 decorators/refinery/blog/ 目录下创建一个名为 post_decorator.rb 的文件,然后在其中写入以下代码:

      decorators/refinery/blog/post_decorator.rb

      Refinery::Blog::Post.class_eval do
        belongs_to :image, :class_name => '::Refinery::Image'
      end
      

      装饰器完成后,您需要将新的 image_id 字段添加到 controllers/refinery/blog/admin/posts_controller.rb 到允许的参数中,如下所示:

      controllers/refinery/blog/admin/posts_controller.rb

      def post_params
        params.require(:post).permit(:title, :body, :custom_teaser, :image_id, :tag_list, :draft, :published_at, :custom_url, :user_id, :browser_title, :meta_description, :source_url, :source_url_title, :category_ids => [])
      end
      

      在上述之后,唯一剩下的就是将新的 image_id 字段添加到表单中,以便能够在这种情况下将图像添加到帖子中:

      views/refinery/blog/admin/posts/_form.html.erb

      <div class="field">
          <%= f.label :image_id, "Post Image" %>
          <%= render :partial => "/refinery/admin/image_picker", :locals => {
              :f => f,
              :field => :image_id,
              :image => f.object.image,
              :toggle_image_display => false
            }
          %>
        </div> 
      

      现在一切都完成了,按照这些步骤,您将能够将任何类型的字段添加到炼油厂模型中,例如本例中的帖子。

      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多