2011-10-14 2 views
1

내 이미지 모델과 HABTM 관계가있는 갤러리 모델에 대한 ActiveAdmin 양식을 쓰려고합니다.ActiveAdmin 양식 오류 : "정의되지 않은 메소드`new_record? '"

내 갤러리 모델에서 이미 "accepts_nested_attributes_for"를 사용하고 있으므로이 사진은 this question과 중복되지 않습니다. 여기

class Image < ActiveRecord::Base 
    belongs_to :admin_user 
    has_and_belongs_to_many :galleries 

    has_attached_file :asset, :styles => { 
             :thumb => "96x96#" 
             } 

    validates_attachment_presence :asset 
end 

입니다 : 여기

class Gallery < ActiveRecord::Base 
    belongs_to :admin_user 
    has_and_belongs_to_many :images 
    accepts_nested_attributes_for :images 
end 

내 이미지 모델 : 여기
<% @gallery.images.build %> 
<%= semantic_form_for [:admin, @gallery] do |g| %> 
    <%= g.inputs "Details" do %> 
    <%= g.input :title %> 
    <%= g.input :images, :as => :check_boxes, :label_method => Proc.new { |image| image_tag(image.thumb_path, :alt => "") + content_tag("h3", image.title) } %> 
    <% end %> 
    <%= g.inputs :for => :images, :name => "New Image" do |image| %> 
    <% if image.new_record? %> 
     <%= image.input :title %> 
     <%= image.input :asset, :as => :file %> 
    <% end %> 
    <% end %> 
    <%= g.buttons %> 
<% end %> 

내 갤러리 모델 : 여기

는 오류가 발생하는 내 갤러리 양식입니다 오류 로그 :

NoMethodError in Admin/galleries#edit 

Showing /home/***/www/***/app/views/admin/galleries/_form.html.erb where line #8 raised: 

undefined method `new_record?' for #<Formtastic::SemanticFormBuilder:0x164b2088> 

Extracted source (around line #8): 

5:  <%= g.input :images, :as => :check_boxes, :label_method => Proc.new { |image| image_tag(image.thumb_path, :alt => "") + content_tag("h3", image.title) } %> 
6:  <% end %> 
7:  <%= g.inputs :for => :images, :name => "New Image" do |image| %> 
8:  <% if image.new_record? %> 
9:   <%= image.input :title %> 
10:   <%= image.input :asset, :as => :file %> 
11:  <% end %> 

Trace of template inclusion: /home/bdastous/.rvm/gems/[email protected]/gems/activeadmin-0.3.1/app/views/active_admin/resource/edit.html.arb 

Rails.root: /home/bdastous/www/hotel_app_cms 
Application Trace | Framework Trace | Full Trace 

app/views/admin/galleries/_form.html.erb:8:in `block (2 levels) in _app_views_admin_galleries__form_html_erb__372176781_187575760' 
app/views/admin/galleries/_form.html.erb:7:in `block in _app_views_admin_galleries__form_html_erb__372176781_187575760' 
app/views/admin/galleries/_form.html.erb:2:in `_app_views_admin_galleries__form_html_erb__372176781_187575760' 

답변

3
<% if image.object.new_record? %> 
+0

감사합니다. –

1

나는 당신이 오류 로그 덤프를 올린다면 도움이 될 것이라고 생각한다. new_record는 다소 모호합니다. 그것은 언급하고 있습니다.

나는 문제가 다음 행과 관련이있다 생각 : 이미지가 전무하기 때문에

1) <% if image.new_record? %> 오류를 던지고있다 :

<% @gallery.images.build %> 
<%= g.inputs :for => :images, :name => "New Image" do |image| %> 
    <% if image.new_record? %> 

내가 보는 두 가지 시나리오가 있습니다.
2) <%= g.inputs :for => :images, :name => "New Image" do |image| %>이 오류를 던지고 있습니다. #inputs은 객체가 새 레코드인지 여부에 따라 다르게 실행되는 레일 양식 빌더 #fields_for 메서드를 감싸는 래퍼입니다 (나는 image.new_record?이 true를 반환하면 속성 해시의 ID를 숨겨진 값으로 포함한다고 생각합니다).

양식 작성 도구가 무효 개체에 대한 양식을 만들려고하기 때문에 어느 쪽이든 그 방법이 있습니다. #inputs이 호출되기 전에 갤러리 이미지를 작성하는 데 옳은 일을했지만, 그보다 훨씬 앞서야한다고 생각합니다. 양식을 만들기 시작하기 전에 배치해야합니다 (#semantic_form_for 이상).

다른 두 가지 유사한 솔루션이 있습니다. 양식이 렌더링되기 전에 컨트롤러에서 갤러리를 작성해야합니다. 그런 다음 @gallery 개체의 양식을 시작하면 이미 이미지가 작성되었음을 이미 알고 있습니다. 또한, 나는 당신이 그것이 단지 구축 된 이미지에 접근이 아니라고하는 문제 같은 것 때문에 희망이 그 중 하나가 작동

<%= g.inputs :for => @gallery.images, :name => "New Image" do |image| %> 

를 지정하면이 작동 생각합니다.

+0

감사합니다. 오류 로그를 추가했습니다. semantic_form_for 위에 갤러리 이미지를 작성 중이지만 오류는 계속 발생합니다. 새로운 갤러리 이미지가 컨트롤러에 내장되도록 나중에 리펙터로 만들려고합니다. –