Как передать объекты через _url на основе маршрутизации в рельсах?

Я хочу передать атрибуты, связанные с двумя объектами, в путь, созданный из маршрута. В этом случае _url - это skip_contact_letter_url. contact_letter и letter передаются через партиал рендеринга. Клип ниже находится в частичном.

<%= link_to_remote "Skip Letter Remote #{contact_letter}",
        :url => skip_contact_letter_url(contact_letter, letter),
        :update => "update-area-#{contact_letter.id}-#{letter.id}" %>
<span id='update-area-<%="#{contact_letter.id}-#{letter.id}"%>'> </span>

Созданный мной маршрут выглядит так:

  map.resources :contact_letters, :member => {:skip => :post} 

А контроллер выглядит так:

 def skip

    @contact_letter = ContactLetter.new(params[:all])

    @contact_letter.status = "skipped"
    @contact_letter.date_sent = Date.today
    #@contact_letter.date_created = Date.today

    if @contact_letter.save
      render :text => 'This letter was skipped!'

    end   end

Когда я смотрю на консоль, ни один из параметров contact_letter или letter не проходит.

Вот как это выглядит в результате маршрутов из рейк-маршрутов:

 skip_contact_email POST   /contact_emails/:id/skip(.:format)                 {:action=>"skip", :controller=>"contact_emails"}

Добавлены примечания:

Я думаю, что маршрут нужно изменить, чтобы я мог передать: contact_id и: letter_id, но не ясно:

 map.resources 'contacts/:contact_id/letters/:letter_id/skip', :controller => 'contact_letters', :action => 'skip'

person Satchel    schedule 27.05.2010    source источник


Ответы (1)


Во-первых, возможно, у вас нет params [: all]. В своих маршрутах вы можете определить что-то вроде этого:

<%= link_to_remote "Skip Letter Remote #{contact_letter}",
    :url => skip_contact_letter_url(
              :contact_letter=>contact_letter.attributes, 
              :letter=>letter.attributes)

Обратите внимание, что contact_letter.attributes создает хеш с атрибутами объекта. В вашем контроллере у вас будет что-то вроде:

@contact_letter = ContactLetter.new(params[:contact_letter])

Надеюсь это поможет.

person dombesz    schedule 28.05.2010
comment
хм ... итак: contact_letter фактически передается в коллекции @contacts .... так что хеш будет атрибутом contact, а не contact_letter. Как мне извлечь их из хэша › - person Satchel; 28.05.2010
comment
Я получаю сообщение об ошибке: skip_contact_letter_url не удалось создать из {: contact_letter = ›{ - person Satchel; 28.05.2010
comment
Я действительно не понимаю, чем ты хочешь заниматься, не могли бы вы меня описать? - person dombesz; 28.05.2010
comment
какая разница между вашим способом skip_contact_letter_url (contact_letter, letter)? - person Satchel; 28.05.2010