0

ActiveAdminをバックエンドとして使用しているRailsアプリケーションがあります。Active AdminはFormtasticを使用していますが、_form.html.erbの入力フィールドの1つを投稿に変換するのに問題があります。

これがフォームです...

<div class="container">
<%= form_for(@post) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
      <ul>
      <% @post.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :author %>
    <%= f.collection_select :blog_id, Blog.all, :id, :name, prompt: "Select a blog" %>        
  </div>
  <div class="field">
    <p>
      Categories:<br>
      <%= hidden_field_tag "post[category_ids][]", nil %>
      <% Category.all.each do |category| %>
        <%= check_box_tag "post[category_ids][]", category.id, @post.category_ids.include?(category.id), id: dom_id(category) %> 
        <%= label_tag dom_id(category), category.name %>
      <% end %>    
    </p>
  </div>
  <div class="field">
    <%= f.hidden_field :status, value: "Draft" %> 
  </div>
  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body, class: "redactor", id: "redactor" %>
  </div>
  <div class="field">
    <%= f.label :published_on %><br />
    <%= f.date_select :published_on %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
</div>

これが私がformtastic固有のコードに変換するのに問題がある部分です。これは、 HABTMチェックボックスでのライアンのスクリーンキャストからのものです。

<div class="field">
    <p>
      Categories:<br>
      <%= hidden_field_tag "post[category_ids][]", nil %>
      <% Category.all.each do |category| %>
        <%= check_box_tag "post[category_ids][]", category.id, @post.category_ids.include?(category.id), id: dom_id(category) %> 
        <%= label_tag dom_id(category), category.name %>
      <% end %>    
    </p>
  </div>

ActiveAdminのadmin/post.rbファイルにあるフォームコードは次のとおりです。これを使用すると、カテゴリのメソッドエラーが発生し続けます。私はそれが現在リストされている方法が間違っていることを知っています。

form do |f|
    f.inputs "Details" do
        f.input :blog, hint: "Select a blog"
        f.input :title, hint: "Enter blog post title"
        f.input :published_on, as: :date, include_blank: false, hint: "Select a date", :prompt => {:day => "Day", :month => "Month", :year => "Year"}, :start_year => Time.now.year
        f.input :status, as: :select, collection: ["Draft", "Published"], include_blank: false, hint: 'Select "Draft" to save and post later, and "Publish" to post now'

        f.input :categories, as: :check_boxes

        f.input :body, input_html: { class: "redactor", id: "redactor" }
    end
    f.buttons
end

誰かが何か入力を持っているなら、私は最も感謝しています。私は素晴らしいドキュメントを見て、ライアンのスクリーンキャストを見ましたが、それでも変換に問題があります。

ありがとう!

編集:解決可能-以下の解決策

FormtasticとActiveAdminにもう少し慣れた後、この作業を行うことができました。以下は、Active Adminのフォーム、表示、およびインデックスビューの関連コードです。

ActiveAdmin.register Post do
index do
    column "Post Title", :title
    column :blog
    column :published_on
    column :status
    column "Category", :categories do |post|
        post.categories.collect { |cat|  cat.name }.join(", ")
    end
    default_actions
end 

show do
    h5 "Created by #{post.blog.name} on #{post.created_at.strftime('%B %-d, %Y')}"
    h5 "Categories: #{post.categories.collect { |cat|  cat.name }.join(", ")}"
    h5 "Current Status: #{post.status}"
    h5 "Published On Date: #{post.published_on.strftime('%B %-d, %Y')} - (will only be posted if marked with Publish as status)"
    div do
        simple_format post.body
    end
end

form do |f|
    f.inputs "Details" do
        f.input :blog, hint: "Select a blog"
        f.input :title, hint: "Enter blog post title"
        f.input :published_on, as: :date, include_blank: false, hint: "Select a date", :prompt => {:day => "Day", :month => "Month", :year => "Year"}, :start_year => Time.now.year
        f.input :status, as: :select, collection: ["Draft", "Published"], include_blank: false, hint: 'Select "Draft" to save and post later, and "Publish" to post now'
        f.input :categories, as: :check_boxes, collection: Category.all
        f.input :body, input_html: { class: "redactor", id: "redactor" }
    end
    f.buttons
end  
end
4

1 に答える 1

0

以下に示すように、Formtastic バージョンを構築できました。Formtastic をもう少し理解してから、Active Admin の微調整を行いました。

以下は、Active Admin のフォーム ビュー、表示ビュー、インデックス ビューの関連コードです。

ActiveAdmin.register Post do
index do
    column "Post Title", :title
    column :blog
    column :published_on
    column :status
    column "Category", :categories do |post|
        post.categories.collect { |cat|  cat.name }.join(", ")
    end
    default_actions
end 

show do
    h5 "Created by #{post.blog.name} on #{post.created_at.strftime('%B %-d, %Y')}"
    h5 "Categories: #{post.categories.collect { |cat|  cat.name }.join(", ")}"
    h5 "Current Status: #{post.status}"
    h5 "Published On Date: #{post.published_on.strftime('%B %-d, %Y')} - (will only be posted if marked with Publish as status)"
    div do
        simple_format post.body
    end
end

form do |f|
    f.inputs "Details" do
        f.input :blog, hint: "Select a blog"
        f.input :title, hint: "Enter blog post title"
        f.input :published_on, as: :date, include_blank: false, hint: "Select a date", :prompt => {:day => "Day", :month => "Month", :year => "Year"}, :start_year => Time.now.year
        f.input :status, as: :select, collection: ["Draft", "Published"], include_blank: false, hint: 'Select "Draft" to save and post later, and "Publish" to post now'
        f.input :categories, as: :check_boxes, collection: Category.all
        f.input :body, input_html: { class: "redactor", id: "redactor" }
    end
    f.buttons
end  
end
于 2012-11-30T00:46:33.697 に答える