Refinerycms - добавление поля изображения в движок блога - PullRequest
8 голосов
/ 21 августа 2011

У меня есть приложение refinerycms с установленным движком блога сообщества. Я хотел бы добавить поле изображения в blog_post, чтобы я мог выбрать основное изображение для сообщения и показать его в своих представлениях.

Я пытался добавить поле изображения, без радости. Затем я посмотрел на один из моих других пользовательских движков с полем изображения, который использует image_id для ссылки на основную таблицу изображений, поэтому я попытался вместо этого добавить поле image_id и отредактировать модель blog_post, чтобы в ней была та же строка «own_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, поэтому я не знаю, какие ссылки здесь отсутствуют. Любая помощь будет принята с благодарностью. Это может быть не специфическая проблема для нефтеперерабатывающих заводов - я новичок в рельсах, так что, может быть, некоторые из них мне здесь не хватает.

Спасибо!

Ответы [ 4 ]

14 голосов
/ 23 ноября 2012

Для рельсов 3.2.3 и refinerycms 2.0.0 работает код подачи,

Создать новую миграцию:

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

7 голосов
/ 08 сентября 2011

В конце концов я так и сделал (но я поместил запрос на добавление функции;)):

Создать новую миграцию:

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 голосов
/ 05 сентября 2012

Задумывались ли вы об использовании изображений страниц для этого?

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

1 голос
/ 24 июля 2015

Я обновлю ответ для рельсов 4.х и НПЗ 3.х

Создайте новую миграцию, добавив новое поле 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 и затем написать в нем этот код:

декораторы / завод / блог / 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 к разрешенным параметрам, например:

Контроллеры / завод / блог / администратор / 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 в форму, чтобы иметь возможность добавить изображение в этом случае в сообщение:

вид / завод / блог / администратор / сообщений / _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> 

Теперь все готово, выполнив эти шаги, вы сможете добавить любое поле в модель нефтеперерабатывающего завода, например в данном случае сообщение.

Надеюсь, это поможет:)

...