accepts_nested_attributes_for - Предотвращение уничтожения на основной модели? - PullRequest
0 голосов
/ 03 января 2012

У меня есть фотогалерея, в которой есть модель Галереи и модель Актива.См. Ниже:

class Gallery < ActiveRecord::Base
  attr_accessible :gallery_name, :description, :assets_attributes 
  has_many :assets, :dependent => :destroy
  accepts_nested_attributes_for :assets, :allow_destroy => true

  def find_featured_image
    assets.featured
  end

  def find_only_featured
   assets.only_featured
  end


class Asset < ActiveRecord::Base
  belongs_to :gallery

  has_attached_file :image,
    :styles => {
      :thumb => '150x150#',
      :medium => '300x300>',
      :large => '600x600>'
    }

  def self.featured
    where( :featured => true ).limit(1)
  end

  scope :only_featured, where(:featured => true)

end
end

Я могу уничтожить активы с помощью своей формы Галереи, но когда я пытаюсь уничтожить саму Галерею, я просто перенаправляюсь в представление Показать без уведомления о подтверждении.

Вот моя форма:

<div id="gallery">
    <div class="headers"><h1>MDN Photo Gallery</h1></div></br>

    <% @galleries.each do |gallery| %>

    <div id="gallery_wrap">
        <div id="gallery_left">
            <div id="gallery_head"><h2><%= gallery.gallery_name %></h2></div>
            <div id="gallery_desc"><%= gallery.description %></div>
        </div>
        <div id="gallery_rt">
            <div id="gallery_featured">
                <% for asset in gallery.assets.featured %>
                  <%= link_to( image_tag(asset.image.url(:medium)), asset.image.url(:large), :class => "fancybox", :rel => gallery.id ) %>
                <% end %>
            </div>
            <div id="gallery_photos">   
            <% for asset in gallery.assets %>   
              <%= link_to( image_tag(asset.image.url(:thumb)), asset.image.url(:large), :class => "fancybox", :rel => gallery.id ) %>
            <% end %>   
            </div>
            <td><%= link_to 'Show', gallery %></td>
            <td><%= link_to 'Edit', edit_gallery_path(gallery) %></td>
            <td><%= link_to 'Destroy', gallery, :confirm => 'Are you sure?', :method => :delete %></td>
        </div>
    </div>
    </br>
    <% end %>
    <br />
<%= link_to 'New Gallery', new_gallery_path %>
</div>

Я использую стандартный метод уничтожения, который создается с помощью скаффолда:

def destroy
@gallery = Gallery.find(params[:id])
@gallery.destroy

respond_to do |format|
  format.html { redirect_to(galleries_url) }
  format.xml  { head :ok }
end

Есть ли какие-то изменения, которые мне нужно сделатьмодель?метод уничтожения?что-нибудь еще?для того, чтобы иметь возможность удалить родителя вложенной модели?

Заранее спасибо за ваши идеи.Есть идеи?

Ответы [ 3 ]

1 голос
/ 03 января 2012

Похоже, что-то не так с загрузкой поддержки JavaScript.Невозможно напрямую привязать якорь к запросу DELETE, поэтому Rails использует JavaScript для ответа на событие нажатия ссылки, а затем делает правильный запрос.Без этого ссылка просто действует как GET.

0 голосов
/ 04 января 2012

Теперь я могу получить уведомление о подтверждении работы (: подтвердить). То, что я сделал, было изменено javascript_include_tag: по умолчанию javascript_include_tag: all. Я забыл, что сделал это изменение. Я не уверен, что включается при вызове метода: defaults, но я просто хотел, чтобы кто-нибудь еще столкнулся с этой проблемой и знал, как я ее исправил. Похоже, использование Button_to вместо Link_to по-прежнему является лучшим решением, хотя link_to теперь будет работать.

0 голосов
/ 04 января 2012

Я нашел это обсуждение на другом сайте, который точно описывает ситуацию, с которой я столкнулся:

http://railsforum.com/viewtopic.php?id=38460

Была рекомендована использовать button_to вместо стандартного link_toЦели защиты от веб-ботов.Я не слышал этого раньше.

Также было отмечено, что было обнаружено отсутствие <% = csrf_meta_tag%> и что первоначальная проблема исчезла, и link_to сработало.Это не так для меня.

Так что теперь у меня есть кнопка, и я могу уничтожить запись.Однако я не получаю уведомление о подтверждении (: подтвердите).Так что все еще что-то не так, но я по крайней мере могу справиться с необходимостью удаления записи.

...