【问题标题】:How do I pass objects through a _url based on a routing in rails?如何根据rails中的路由通过url传递对象?
【发布时间】:2011-02-24 19:22:14
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails routing controller


    【解决方案1】:

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

    【讨论】:

    • hmm...so :contact_letter 实际上是在集合中传递@contacts ....所以哈希将是联系人的属性,而不是contact_letter。如何从哈希中提取那些>
    • 我收到一个错误:skip_contact_letter_url failed to generate from {:contact_letter=>{"
    • 我不太明白你喜欢做什么,你能描述一下我吗?
    • skip_contact_letter_url(contact_letter, letter) 你的方式有什么区别?
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2019-01-10
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多