Rails 4.2.1
Ruby 2.1.5
在我的routes.rb,我有:正確的路線到達控制器動作與傳遞的參數正常工作 - Rails的
get '/activate_test_set' => 'test_sets#activate_test_set'
在test_sets_controller.rb,我有:
def activate_test_set test_set
test_set.update_attribute(status: 'active')
render test_sets_url
end
在我的意見/ test_sets/index.html中,我有:
<%= link_to "#{t('activate')}", activate_test_set_path(test_set) %>
當我的觀點是,如果我的鏈接,我得到了發展錯誤日誌中的點擊:
Started GET "/activate_test_set.1" for ::1 at 2016-01-01 13:23:55 -0800
Processing by TestSetsController#activate_test_set as
Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms)
ArgumentError (wrong number of arguments (0 for 1)):
app/controllers/test_sets_controller.rb:69:in `activate_test_set'
請告訴我正確的routes.rb申報正確,使這項工作?
我也是在routes.rb中嘗試過這樣的:
get '/activate_test_set/:id' => 'test_sets#activate_test_set'
,這就是我得到:
Started GET "/activate_test_set.1" for ::1 at 2016-01-01 15:14:57 -0800
SELECT `schema_migrations`.* FROM `schema_migrations`
ActionController::RoutingError (No route matches [GET] "/activate_test_set.1"):
解決方法:
以下一些額外的實驗,以下是我解決了這個問題。作爲一個新手,我不知道這是最好的解決方案,但這裏有雲:
match "activate_test_set/:id", :to => "test_sets#activate_test_set", :as => :activate_test_set, via: [:get]
正如您從錯誤中看到的那樣,它不會將您引導至「activate_test_set」操作,而是指向「pause_test_set」操作。您可以通過在控制檯中執行'rake routes'來檢查正確的鏈接快捷方式。 – Kkulikovskis
將這個'get'/ activate_test_set'=>'test_sets#activate_test_set''改成'get'/ activate_test_set /:id'=>'test_sets#activate_test_set''並且試試我希望它能工作 –
我複製了錯誤的部分日誌文件。我有兩個激活和玩的動作。請參閱編輯 – Joseph