link_to:controller,:视图中的操作不能在rails上运行ruby

时间:2012-09-24 20:19:31

标签: ruby-on-rails-3 model-view-controller routes link-to

尝试使用link_to将信息发送到我的控制器中的操作。

链接看起来像这样:

<%= link_to "Buy", {:controller => :policies, :action => :policy_option_price_calc, :option => "policy_option_a_cost" }, {:method => :post}  %>

我有一个策略控制器,我的操作内部如下所示:

def policy_option_price_calc(params)
   #logic stuff

   render :partial => "/policies/swipe_protect/price_total"
end

在我的路线中我有:

resources :policies
    member do
        post 'policy_option_price_calc'
    end
end

我不知道为什么但是在点击link_to链接时我得到了这个网址:

http://localhost:3000/?action=policy_option_price_calc&controller=policies&option=policy_option_a_cost

当然不存在,但它甚至没有给我一个错误它只是由我的HomeControll#index

处理

我看过:

Form tag helpers

rubyguild routing

Stack overflow question

还有更多。任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用指定的路由格式?

<%= link_to 'Buy', policy_option_price_calc_policy_url(:option => 'policy_option_a_cost'), :method => :post %>

您可能需要调整路线的名称,但这就是我要做的。你尝试这样做的方式你想要使用字符串而不是符号:

<%= link_to 'Buy', { :controller => 'policies', :action => 'policy_option_price_calc', :option => 'policy_option_a_cost' }, { :method => :post } %>

有关详细信息,请参阅http://guides.rubyonrails.org/routing.html#the-query-string

答案 1 :(得分:0)

如果删除

{ :method => post }

hash我认为会创建预期的url。 此时您的请求被路由到HomeController,因为这是您的URL正在调用的。

http://localhost:3000/policies/?action=policy_option_price_calc&controller=policies&option=policy_option_a_cost

是您正在考虑的路线,但缺少政策/ 部分。

然而,不是您问题的解决方案。对于POST请求,您应该使用button_to或表单助手而不是link_to。