Refinerycms - добавление поля изображения в движок блога

У меня есть приложение 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 ответа

Для рельсов 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>

для более подробной информации, обратитесь по ссылке расширяющие модели

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

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

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>

Тебе должно быть хорошо идти!:)

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

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

Я обновлю ответ для рельсов 4.x и НПЗ 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, а затем написать в нем этот код:

декораторы / завод / блог / 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> 

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

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

Другие вопросы по тегам