2013-03-12 49 views
0

我是新來rails.I我得到在落實創建操作以下錯誤..路由錯誤而實施的軌道創造3.2

Routing Error 

No route matches {:action=>"show", :controller=>"settings", :format=>nil} 

我控制器文件如下: -

@settings = Setting.new(params[:settings]) 

respond_to do |format| 
    if @settings.save 
    format.html { redirect_to @settings, notice: 'Setting was successfully created.' } 
    format.json { render json: @settings, status: :created, location: @settings } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @settings.errors, status: :unprocessable_entity } 
    end 
end 

我的routes.rb文件如下: -

resources :settings do 
    member do 
    post 'add' 
    post 'remove' 
    get 'settings/id' 
    end 

    collection do 
    get 'add' 
    get 'list' 
    post 'get_settings' 
    get 'get_settings' 
    end 
    end 

    resources :settings 

我耙途徑有以下幾點: -

 GET /settings/get_settings(.:format 
settings#get_settings 
         GET /settings(.:format) 
settings#index 
         POST /settings(.:format) 
settings#create 
         GET /settings/new(.:format) 
settings#new 
         GET /settings/:id/edit(.:format) 
settings#edit 
         GET /settings/:id(.:format) 
settings#show 
         PUT /settings/:id(.:format) 
settings#update 
         DELETE /settings/:id(.:format) 
settings#destroy 
         GET /settings(.:format) 
settings#index 
         POST /settings(.:format) 
settings#create 
         GET /settings/new(.:format) 
settings#new 
         GET /settings/:id/edit(.:format) 
settings#edit 
         GET /settings/:id(.:format) 
settings#show 
         PUT /settings/:id(.:format) 
settings#update 
         DELETE /settings/:id(.:format) 
settings#destroy 

我create.html.erb如下:_

<%= form_for @setting do |f| %> 
    <% if @setting.errors.any? %> 
    <div id="errorExplanation"> 
    <h2><%= pluralize(@setting.errors.count, "error") %> prohibited this setting from being saved:</h2> 
    <ul> 
    <% @setting.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
    <% end %> 
</br></br> 


Id: <%= f.text_field :id %><br> 
Name: <%= f.text_field :name %><br> 


<%= f.submit "Create" %>&nbsp;&nbsp; 

我的錯誤日誌: -

Started GET "/settings/new" for 127.0.0.1 at 2013-03-12 18:57:09 +0530 
Processing by SettingsController#new as HTML 
    Rendered settings/new.html.erb within layouts/application (170.2ms) 
Completed 500 Internal Server Error in 1112ms 

ActionController::RoutingError (No route matches {:action=>"show", :controller=> 
"settings", :format=>nil}): 
    app/views/settings/new.html.erb:7:in `_app_views_settings_new_html_erb__979995 
802_23360592' 
    app/controllers/settings_controller.rb:29:in `new' 


    Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.1 
1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within resc 
ues/layout (0.0ms) 

我的new.html: -

<h1>New setting</h1> 




<%= form_for @setting do |f| %> 
    <% if @setting.errors.any? %> 
    <div id="errorExplanation"> 
    <h2><%= pluralize(@setting.errors.count, "error") %> prohibited this setting from being saved:</h2> 
    <ul> 
    <% @setting.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
    <% end %> 
</br></br> 


Id: <%= f.text_field :id %><br> 
First Name: <%= f.text_field :name %><br> 


<%= f.submit "Create" %>&nbsp;&nbsp; 

<% end %> 




<%= link_to 'Back', settings_path %> 

任何人都可以請幫助我。

+0

爲什麼在'routes.rb'中兩次定義'resources:settings'? – Baldrick 2013-03-12 12:16:10

+0

嘗試耙路線,看看你有什麼路線可用 – arieljuod 2013-03-12 12:17:46

+0

@ arieljuod.i已更新問題 – Catmandu 2013-03-12 12:31:50

回答

0

一個很好的起點總是通過打印出你的路線:

rake routes 

然後,你需要定義控制器中的show方法:

def show 
    .. 
end 

和一個視圖:

app/views/settings/show.html.erb 

隨着resources :settings他應該認識到有一個演出路徑。女巫可能是這樣的:

settings_path(user.id) 

resources :settings不需要包括兩次。我想這與UserController無關。導入部分是SettingController。如果您在/view/user/show.html.erb上顯示SettingsShow鏈接,該錯誤可能會出現? (不是100%肯定的,需要看到更多的代碼,SettingController會互相影響)。

+0

我已更新他的問題 – Catmandu 2013-03-12 12:31:23

+0

正如你可以看到你的路線顯示路徑始終需要顯示一個id(/settings/:id(.:format))。因此,請務必使用像settings_path(user.id)這樣的ID訪問show頁面。並確保你已經在你的設置控制器中定義了一個show方法,並且你有一個show view。 – 2013-03-12 12:34:23

+0

你可以指定我必須將settings_path(user.id)放在index.html中嗎? – Catmandu 2013-03-12 12:39:04

0

把你的形式new.html.erb,而不是像create.html.erb

new.html。ERB

<%= form_for @setting do |f| %> 

#Your stuff 

<% end %> 

你的新動作,然後是:

新動作

def new 
@setting = Setting.new 
end 

你的控制器則是 -

創建行動:

UPDATE:

def create 
    if request.setting? 
    @setting = Setting.new(params[:setting]) 
    # other setup for save 
    if @setting.save 
     flash[:notice] = 'Setting was successfully created.' 
     redirect_to @setting 
    else 
     render :action => 'new' 
    end 
    end 
end 

注:有沒有這樣的事情create.html.erb當你說是創建一個POST方法。您也應該在整個代碼中使用@setting,而不是@settings,這是它在控制器的新方法中定義的。

+0

我試過了,但仍然沒有幫助 – Catmandu 2013-03-12 12:54:45

+0

你還沒有完全嘗試過,看到我的筆記在答覆中,只是這樣做,沒有'create.html.erb'什麼也沒有複數 – 2013-03-12 12:55:47

+0

對不起,剛剛更改'@setting = Setting.new(params [:settings])'到'@setting = Setting.new(params [:setting])'看到更新,它現在就可以工作。 – 2013-03-12 12:58:11