如何根据rails中的路由通过_url传递对象?

时间:2010-05-27 18:16:22

标签: ruby-on-rails routing controller

我想将与两个对象关联的属性传递到从路径创建的路径中。在这种情况下,_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的参数都没有通过。

由于这些路线,这就是rake路线的样子:

 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'

1 个答案:

答案 0 :(得分:0)

首先,可能你没有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])

希望这有帮助。