8

コミュニティ ブログ エンジンがインストールされた、refinerycms アプリがあります。blog_post に画像フィールドを追加して、投稿のメイン画像を選択し、ビューに表示できるようにしたいと思います。

画像フィールドを追加しようとしましたが、喜びはありません。次に、画像フィールドを持ち、image_id を使用してメインの画像テーブルにリンクしている他のカスタム エンジンの 1 つを調べたので、代わりに image_id フィールドを追加し、blog_post モデルを編集して同じ「belongs_to」行を持つようにしました。ブログの編集ページが読み込まれ、画像ピッカーが部分的に機能しますが、保存を押すと、テーブルに何も送信されていないように見えます。

気になる点の 1 つは、画像フィールドを使用してカスタム エンジンを作成したときに、それをフィールド タイプの画像として指定したことです。これにより、バックエンドに image_id フィールドが作成され、すべてが設定されたように見えるので、引き続きイメージ クラスを参照できます。ブログに画像フィールドを追加しても、それは行われませんでした。画像というフィールド タイプを作成しただけです。カスタム エンジンのテーブルを調べると、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

4 に答える 4

14

rails 3.2.3 と renamerycms 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を参照してください

于 2012-11-23T04:35:06.303 に答える
7

これは私が最後にそれをした方法です(しかし私は機能リクエストを入れました;)):

新しい移行を作成します。

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>

あなたはそれなら行ってもいいはずです!:)

于 2011-09-08T16:32:42.127 に答える
3

これにページ画像を使用することを考えましたか?

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

于 2012-09-05T12:07:15.520 に答える
1

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という名前のファイルを作成し、その中に次のコードを記述します。

デコレータ/リファイナリー/ブログ/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> 

これですべて完了です。この手順に従って、この場合の投稿のように、あらゆる種類のフィールドをリファイナリー モデルに追加できます。

それが役に立てば幸い :)

于 2015-07-24T04:50:35.707 に答える