链接助手 VS 输入 URL
Posted
技术标签:
【中文标题】链接助手 VS 输入 URL【英文标题】:Link helper VS typing URL 【发布时间】:2014-08-05 20:42:44 【问题描述】:发生了一些奇怪的事情,我不知道为什么。
当我使用助手<%= 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
【问题讨论】:
你能解释一下“我的新游戏表单没有提交”是什么意思吗?如果有表格,您应该发布它的代码。 你有什么错误吗? @enragedcamel 这个link_to 是一个指向“新”视图的链接,带有一个创建新游戏的表单。当我使用辅助格式时,表单不起作用。但是如果我输入同一个链接的 URL,表格就可以了。不幸的是,我没有收到任何错误:-( @Pavan 不,没有错误。 发布您的rake routes
输出和您的routes.rb
文件。
【参考方案1】:
当然,您可以使用字符串作为相对 URL。这永远不会崩溃,因为 rails 不会尝试解决您构建它的路线。我的猜测是,你可能有某种错字。
没有理由不这样做。我已经在您的 git 应用程序中搜索“new_game_path”,但找不到使用此代码的单个示例。
我只在您的布局中找到< a href="/games/new">New game</a>
。
将其替换为 <%= link_to 'New Game', new_game_path %>
这适用于您的应用。我刚刚测试过了。
如果您打算在某些时候使用国际化,则应避免使用标准 html 链接。它们不会使您的语言环境保持不变。
【讨论】:
他在布局本身的< a href="/games/new">New game</a>
上方有这行<%= link_to 'New Game', new_game_path %>
。
不在他的 git repo 中的最新版本中
我正在测试不同的选项以进行调试。原始代码使用 rails 助手。无论如何,谢谢。
感谢您的帮助。答案是:turbolinks :-/ 我删除了 turbolinks,现在它工作得很好。
你不应该这样做。我已经在我的机器上运行了你的应用程序,它运行良好。【参考方案2】:
表格
您提到您的“表单未提交”
这不是您的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
--
修复
当您提到您的新游戏表单没有提交时,这是您的表单本身的问题。这可能是由多种原因造成的,但通常与您呈现表单的方式有关
要解决此问题,您需要详细说明如何呈现表单以及您希望它如何提交
更新
阅读您更新的 cmets 后,如果在您将请求发送到“裸”网址时表单有效,则问题可能不在于表单本身。
根据经验,您在定义链接等时总是希望使用Rails helpers
。在您的application layout
中,我发现您发布了“纯”HTML 来创建链接。这很糟糕,因为如果 Rails 语法发生变化,或者您的路线发生变化,您的应用程序将无法正确更新。
【讨论】:
我正在测试不同的选项以进行调试。原始代码使用 rails 助手。无论如何,谢谢。 感谢您的帮助。答案是:turbolinks :-/ 我删除了 turbolinks,现在它工作得很好。以上是关于链接助手 VS 输入 URL的主要内容,如果未能解决你的问题,请参考以下文章