如何在Rails中为控制器添加命名助手

时间:2016-09-09 08:59:56

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller controller

以下是我的应用中的路线:

user@localhost:~/HelloWorld$ rake routes
       Prefix Verb URI Pattern              Controller#Action
biodata_store GET  /biodata/store(.:format) biodata#store
greet_welcome GET  /greet/welcome(.:format) greet#welcome
 greet_wishes GET  /greet/wishes(.:format)  greet#wishes
   time_htime GET  /time/htime(.:format)    time#htime
   login_auth POST /login/auth(.:format)    login#auth
              POST /biodata/store(.:format) biodata#store
        greet GET  /greet(.:format)         greet#index
         time GET  /time(.:format)          time#index
        login GET  /login(.:format)         login#index
      biodata GET  /biodata(.:format)       biodata#index
user@localhost:~/HelloWorld$ 

在上面的路线中,我有一个名为'login'的控制器。因此,当我调用'localhost:3000 / login'时,它会提供'index.html'文件 放在'app / view / login /'目录中。一旦我提交登录表单,输入的数据就会转到'/ login / auth'动作。我在这 在index.html文件中将方法设置为POST。所以,我只能直接从浏览器获取'/ login'而不是'/ login / auth'页面。

与此类似,我创建了一个'/ biodata'控制器,它提供输入表单以获取用户的详细信息。一旦我提交表格, 使用POST方法将数据传递给'/ biodata / store'。所以,我希望我无法直接访问'/ biodata / store'控制器 浏览器。但在我的应用程序中,我能够访问它。如何解决这个问题?

    /login --> User can access directly.
    /login/auth --> User should not access this page directly.

如上所述,登录控制器正常工作。但是下面的biodata控制器没有正常工作。

    /biodata --> User can access directly.
    /biodata/store --> User should not access this page directly.(But now it is accessible). 

我希望这是由于命名助手。因为控制器/ biodata / store的命名助手中没有条目。那么如何解决这个问题?

routes.rb中:

Rails.application.routes.draw do
  get 'biodata/store'
  get 'greet/welcome'
  get 'greet/wishes'
  get 'time/htime'
  post 'login/auth'
  post 'biodata/store'
  get 'greet' => 'greet#index'
  get 'time' => 'time#index'
  get 'login' => 'login#index'
  get 'biodata' => 'biodata#index'
end

1 个答案:

答案 0 :(得分:2)

用户可以直接访问此页面,因为您有

get 'biodata/store'
路线中的

路线.rb。只需删除它就可以了,