奇怪的事情发生了,我不知道为什么。
当我使用辅助<%= link_to "New game", new_game_path %>
时,我的new game form
没有提交。
但是当我访问视图输入URL localhost:3000/games/new
表单工作得很好
你知道怎么解决吗?
谢谢,
这里是我的rake路线
Prefix Verb URI Pattern Controller#Action
root GET / games#index
user_sessions GET /user_sessions(.:format) user_sessions#index
POST /user_sessions(.:format) user_sessions#create
new_user_session GET /user_sessions/new(.:format) user_sessions#new
edit_user_session GET /user_sessions/:id/edit(.:format) user_sessions#edit
user_session GET /user_sessions/:id(.:format) user_sessions#show
PATCH /user_sessions/:id(.:format) user_sessions#update
PUT /user_sessions/:id(.:format) user_sessions#update
DELETE /user_sessions/:id(.:format) user_sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
delete_progress_progresses POST /progresses/delete_progress(.:format) progresses#delete_progress
progresses POST /progresses(.:format) progresses#create
search GET /search(.:format) games#search
game_levels GET /games/:game_id/levels(.:format) levels#index
POST /games/:game_id/levels(.:format) levels#create
new_game_level GET /games/:game_id/levels/new(.:format) levels#new
edit_game_level GET /games/:game_id/levels/:id/edit(.:format) levels#edit
game_level GET /games/:game_id/levels/:id(.:format) levels#show
PATCH /games/:game_id/levels/:id(.:format) levels#update
PUT /games/:game_id/levels/:id(.:format) levels#update
DELETE /games/:game_id/levels/:id(.:format) levels#destroy
insert_levels_game POST /games/:id/insert_levels(.:format) games#insert_levels
games GET /games(.:format) games#index
POST /games(.:format) games#create
new_game GET /games/new(.:format) games#new
edit_game GET /games/:id/edit(.:format) games#edit
game GET /games/:id(.:format) games#show
PATCH /games/:id(.:format) games#update
PUT /games/:id(.:format) games#update
DELETE /games/:id(.:format) games#destroy
login GET /login(.:format) user_sessions#new
logout POST /logout(.:format) user_sessions#destroy
我的路由文件
Rails.application.routes.draw do
root :to => 'games#index'
resources :user_sessions
resources :users
resources :progresses, :only => :create do
collection do
post 'delete_progress'
end
end
get 'search' => 'games#search'
resources :games do
resources :levels
member do
post 'insert_levels'
end
end
get 'login' => 'user_sessions#new', :as => :login
post 'logout' => 'user_sessions#destroy', :as => :logout
end
当然,您可以使用string作为相对URL。这将永远不会崩溃,因为rails不会试图解决您的路线构建它。我猜,你可能打错了什么字。
没有理由不这样做。我已经搜索了你的git应用程序的"new_game_path",但找不到一个例子,你使用这个代码。
我在你的布局中只发现了< a href="/games/new">New game</a>
。
将其替换为<%= link_to 'New Game', new_game_path %>
,这在您的应用程序中有效。我刚刚测试了它。
如果您打算在某些时候使用国际化,则应该避免使用标准的HTML链接。它们不会使您的区域持久化。
form
你提到你的"表单不提交"
这不是你的link_to
的问题-这是你的form
的问题;这是两个不同的问题:
,
link_to
link_to
带你到一个新的页面。这是一个帮助创建<a href="http://your_link.com">Your text</a>
这意味着,如果你发送请求到你的new
动作,它应该不重要如何用户到达那里-只有如何action
呈现。
form
的典型情况如下:
#app/views/games/new.html.erb
<%= form_for @game do |f| %>
<%= f.text_field :attribute %>
<%= f.submit "test" %>
<% end %>
#app/controllers/games_controller.rb
Class GamesController < ApplicationController
def new
@game = Game.new
end
end
,
修复
当你提到你的新游戏表单没有提交时,这是你的表单本身的问题。这可能是由多种原因造成的,但通常与呈现表单
的方式有关。要解决这个问题,你需要详细说明如何渲染你的表单&您希望它如何提交
阅读你更新的评论,如果表单工作时,你发送请求到"裸"url,问题可能不是与表单本身。
作为经验法则,在定义链接等时,您总是希望使用Rails helpers
。在你的application layout
中,我发现你发布了"纯"HTML来创建一个链接。这很糟糕,因为如果Rails语法改变了,或者你的路由改变了,你的应用程序将无法正确更新。