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>
Тебе должно быть хорошо идти!:)
Вы думали об использовании изображения страниц для этого?
Я обновлю ответ для рельсов 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>
Теперь все готово, выполнив эти шаги, вы сможете добавить любое поле в модель нефтеперерабатывающего завода, например, в данном случае пост.
Надеюсь, поможет:)