我是Ruby On Rails的新手。我看了很多教程来说明rails路线是如何工作的。我仍然无法理解,如果rails在路由中与GET命令匹配,然后转到控制器查看操作,那么当我的控制器完全没有动作时,它如何打开home/index在哪里是我的控制器。
My HomeController
class HomeController < ApplicationController
layout false
end
我的路线档案:
Rails.application.routes.draw do
root 'home#index'
get 'home/inde
我使用rails 5.1.2和simle_form 4.0.0创建了能够创建评论的博客。App有两种形式--第一种是创建博客文章,第二种是创建评论。评论表单嵌套在post显示页面中。两个表单的验证都可以正常工作,但问题是注释表单不显示错误消息。如何做到这一点呢?
Post模型:app/model/post.rb
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
end
评论模型: app/models/comment.rb
class Comment < ApplicationRecor
我目前有一个典型用户模型的Ruby on Rails应用程序。我想允许用户编辑他们自己的帐户信息,并更改他们的电子邮件或密码。然而,我希望在两个不同的页面上有相应的表单。
存在一个已经具有show、new、create和edit路径的users_controller.rb。问题是,使用edit路径来update用户数据库将要求所有表单都在同一页上,这对于只希望更新他们的电子邮件或密码的用户来说是不方便的,而不是同时更新两者。实际上,我需要该edit路径在多个页面上可用。
有什么建议吗?
只是好奇是否有人知道在Rails框架中使用什么Ruby技术来完成下面的任务。
如果我不在Rails控制器上编写index方法,那么Rails仍然会呈现索引视图文件,如果该路径与该路径匹配的话。这是有意义的,因为我的控制器继承自父类,父类必须有自己的index方法。
但是,如果我do定义了一个index方法,并且只告诉它设置一个实例变量,它仍然呈现适当的视图。例如:
def index
@weasels = Weasel.all
# If I omit this line, Rails renders the index anyway.
# If this behavior is
我试图在Rails中的API控制器上运行一个单元测试。但它的行为并不像我想的那样。
这条线适用于:
post '/api/sessions', params
然而,这一行
post :create, params
将抛出错误
Failure/Error: post :create
URI::InvalidURIError:
bad URI(is not URI?): http://www.example.com:80create
我可以使用第一个语法,但最好知道为什么第二个语法不起作用?因为我记得在以前的项目中使用过这个语法,而且它可以工作。我不记得在我的RSpec配置
我在Ruby on Rails中使用进行在线购买。其中一种状态是用户在表单中填写账单信息。此表单是必需的,因此我在转换到下一个状态时对其进行验证,如下所示:
state :confirm do
validates_presence_of :name, :email
end
其中表单在状态:info上,下一个是:confirm。
这可以很好地工作:如果缺少任何字段,state_machine将不会转换到下一个状态。但是,当验证返回false时,我找不到有关如何显示错误通知的信息。我希望在验证失败时显示一条消息,并重定向到窗体状态。提前感谢您的帮助!
我正在学习Michael Hartl的Rails教程,在3.4节“生成StaticPages控制器”中,我无法执行“rails generate controller StaticPages home help”。当我键入该命令时,我得到以下消息,看起来像是rails帮助消息:
Usage:
rails new APP_PATH [options]
Options:
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Def
对rails和ruby来说是个新手。与form_for和联想做斗争。我正在尝试设置一个rails应用程序,允许用户从客户列表中进行选择。客户端通过has_many :through关系进行关联。我让模型按预期工作,我可以通过rails控制台向用户添加客户端。现在,我想将此功能转移到web界面上。下面的代码是我尝试过的,但对我来说没有意义。我不知道哪个控制器的动作是正确的。我应该在客户端的创建操作中处理表单POST吗?我实际上并不想创建一个新的客户端,我只是希望用户从现有客户端列表中选择并创建关联。
我的模型如下:
class Client < ActiveRecord::Base
has
在Ruby on Rails中,当我从另一个控制器调用控制器方法时,目标方法(被调用的方法)上的before_filter不会执行。
我怎样才能让它被执行呢?
(要遵循的粗略示例代码)
before_filter :filter_method, :only => [:method_b]
def method_a
if blahblahblah == x
do_something
render j
else
method_b
end
end
def method_b
do_something_else
end
所以在这里filter_method不会执行
instructions_routing_spec.rb
require "spec_helper"
describe InstructionsController do
before(:each) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
after(:each) do
DatabaseCleaner.clean
end
describe "routing" do
it "routes to #new
我在做Hartle教程,每次我运行rake测试时都会看到这个失败,我看到了这个失败:
1) Failure:
StaticPagesControllerTest#test_should_get_help [.../sample_app/test/controllers/static_pages_controller_test.rb:14]:
<Help | Ruby on Rails Tutorial Sample App> expected but was
<Ruby on Rails Tutorial Sample App>..
Expected 0 to be
因此,正如我确信您都熟悉的那样,您可以在Rails中执行调用html.erb文件的操作。您还可以设置远程呈现调用嵌入式ruby文件的操作(例如,向"post“控制器提交”post“表单,远程处理它,并调用js.erb文件更新页面中的元素)。
我想知道的是,在运行加载模板的操作时,如何运行js.erb文件(html.erb文件)。若要解释,请考虑是否要运行用户显示页面:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
我正在遵循railstutorial by Michael Hartl,我不明白第5章中测试失败的原因。这本书使用了最小的框架,但我决定使用RSpec。为此,我删除了测试文件夹,并将rspec-rails包含在我的Gemfile中,然后运行bundle install和rails g rspec:install来生成规范文件夹。但是,有一些测试我觉得很方便地用最小的语法运行,比如assert_select在static_pages_controller_spec.rb文件中。下面是我的spec文件的样子:
require "rails_helper"
RSpec.descri
如何在rails应用程序中呈现application.html.erb视图?
我尝试向application_controller.rb控制器添加一种方法:
def amethod
end
然后更新routes.rb文件:
get '/', to: 'application#amethod'
都没有用。我收到以下错误消息:
缺少模板应用程序/amethod,包含{:locale=>:en,:formats=>:html,:variants=>[],:handlers=>:erb,:builder,:ruby,:ruby,::formats
给定一个rails RESTful控制器
class WidgetsController
def new
@widget = Widget.new
end
def create
@widget = Widget.new(params[:widget])
render :new and return unless w.save
redirect_to widget_path(@widget)
end
end
除了捕获参数和呈现验证消息之外,如果验证失败,为什么约定是render :new而不是redirect_to new_widget_pat