Tag: 控制器

Rspec / Capybara:测试是否调用控制器方法

鉴于我设置了一个带有索引动作的HomeController class HomeController < ApplicationController def index @users = User.all end end 并通过根路径路由到它, root :to => “home#index” 为什么这个请求规范失败了 it ‘should called the home#index action’ do HomeController.should_receive(:index) visit root_path end 以下消息 Failure/Error: HomeController.should_receive(:index) ().index(any args) expected: 1 time received: 0 times ? 是因为索引方法被调用为实例方法而不是类方法?

任意或自定义URL的Railsfunction测试

我的Rails应用程序中有一个名为“Photo”的RESTful资源。 我正在使用Paperclip来为我的照片提供不同的“样式”(缩略图等),并且我使用自定义路径来RESTful访问这些样式: map.connect “photos/:id/style/*style”, :controller => “photos”, :action => “show” 这工作正常,但我想写一个测试,以确保它保持这种方式。 我已经有一个function测试来调用Photo控制器的show动作(实际上是由scaffold生成): test “should show photo” do get :show, :id => photos(:one).to_param assert_response :success end 它测试URL“/ photo / 1”处的动作执行情况。 现在我想测试URL“/ photo / 1 / style / foo”的执行情况。 不幸的是,我似乎无法让ActionController :: TestCase点击该URL; get方法总是需要一个action / id,并且不接受URL后缀。 如何测试自定义url? 更新 在检查@ fernyb的答案时,我在同一个rdoc中找到了这个片段 在测试中,您只需传递URL或命名路由即可获取或发布。 def send_to_jail get’/ jail’assert_response:success assert_template“jail / front”end […]

部分控制器动作

我试图为我的rails应用程序中的某个部分创建一个动作,但是想知道如何命名它。 它在开头是否有下划线? 喜欢: def _my_partial end 还是没有下划线? 控制器指南中未提及

显示随机数据库项目以查看 – Rails

我已经研究了这个问题的答案了一段时间,但无法弄明白。 我正在尝试构建一个显示数据库中随机项的视图(我最终将通过按钮单击进行未来的实现)。 我不知道什么是错的。 我有一个名为Answers的脚手架,只显示文字。 在我的Answers Controller中,我构建了一个名为random的自定义方法: def index @answers = Answer.all end def show end def random # @randitem = @items[rand(items.count)] @randanswer = Answer.random_answer end 在我的模特中: class Answer < ActiveRecord::Base def self.random_answer Answer.order("RAND()").first end end 最后,在我的观点/ random.html.erb中: 文件夹截图: 我只是以我的智慧结束,这令人沮丧,因为我觉得这是一个非常简单的问题。 任何建议或有用的资源将不胜感激。

臭名昭着的AbstractController :: ActionNotFound – Devise + Rails

所以我已经阅读了如何解决这个问题: 自定义设计会话控制器的RSpec测试因AbstractController :: ActionNotFound失败 和 http://lostincode.net/blog/testing-devise-controllers 但我在哪个文件下添加这些更改是我的问题: 在我的rspec文件夹下 registrations_controller 我试过这个 before :each do request.env[‘devise.mapping’] = Devise.mappings[:user] end require ‘spec_helper’ describe RegistrationsController do describe “GET ‘edit'” do it “should be successful” do get ‘edit’ response.should be_success end end end 哪个不起作用,任何帮助改变特定文件以使这项工作将不胜感激。 编辑 所以我也尝试过 – https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec) 所以我创建了一个带有spec / support的文件夹,并创建了一个名为controllers_macros.rb的文件 module ControllerMacros def login_admin before(:each) do @request.env[“devise.mapping”] = Devise.mappings[:admin] […]

通过新表单传递ID

这个问题是关于我正在尝试的另一种方法: 通过新表单传递ID 我有一个group#view page ,由Person访问。 在此页面中, Person可以通过我开发的方法查看组的成员。 问题是我需要使用group的Id,访问页面的person的id以及来自该group的id来创建模型Honors 。 在我的Honors控制器中,我有: def create @person = Person.find(current_person) @asked_groupmembership = @person.owned_group_memberships.find_all_by_status(true,:include => [:group, :member]) @asked_groupmembership.each do |agm| @honor = Honor.create(:group => Group.find(params[:group_id]), :person => Person.find(current_person), :honored => Person.find(agm.member.id)) end if @honor.save … end 在我看来,我有一个链接,指导person到表单,以创建一个新的荣誉: @group.id, :person => current_person.id, :honored => agm.member.id) %> 但在我的表格中,我无法得到ids和东西 honors_path(:group_id, :person, :honored)) do |f| […]

PostsController中的NoMethodError #create undefined方法`latitude =’“将lat和long保存到连接的表!!”

我试图从使用paperclip上传的图像的元数据中将这些坐标发布到另一个名为places的表中。“所以坐标转到places表。” 在places表中有列纬度和经度。 提交post后我遇到了这个错误。 错误的突出显示部分是self.latitude = parse_latlong(etc ….)。 post_id是places表中的外键。 这在以前我在邮政表中有纬度和经度时起作用。 但现在我给它自己的表以更好的数据库结构..我只需要知道如何让我的post控制器与我的位置控制器一起工作,如果这是主要问题?? 场所控制器 class PlacesController < ApplicationController before_action :set_post def create @place = @post.places.build(place_params) if @place.save flash[:success] = "coorinates saved" redirect_to :back else flash[:alert] = "Check the form, something went wrong." render root_path end end private def place_params params.require(:place).permit(:continent, :country, :city, :address, :latitude, :longitude) end def set_post […]

rspec控制器规格测试后期行动

由于某种原因, post spec工作正常,但post_comment_spec测试失败。 post有很多post_comments,post_comment属于post。 错误: 1) Posts::PostCommentsController when user is logged in POST create with invalid attributes doesn’t save the new product in the db Failure/Error: ActionView::Template::Error: undefined method `to_time’ for nil:NilClass posts_controller def create @post = current_user.posts.new(post_params) authorize @post if @post.save respond_to do |format| format.js end else respond_to do |format| format.js end end end […]

得到戏剧将对象转换为字符串

我正在开发一个包含CMS webapp基本元素的webapp。 用户可以克隆存储库,运行rails服务器,并转到允许他们将应用程序从当前名称“框架”重命名为任何他们想要的页面。 经过一番争论,我决定将重命名代码放入我的控制器中(而不是在rake文件中)。 但我的问题是我的控制器无法弄清楚发生了什么。 这就是我的观点。 Rails Framework ‘create’ %> 这是我的控制者。 class NamerController < ApplicationController def index render('new') end def new @appname = Namer.new end def create @appname = Namer.new(params[:appname]) #first, change any instances of the term "framework" to the new name of the app file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb'] file_names.each do |file_name| text = […]

两个不同目录中的控制器名称相同

来自’使用Rails 4的敏捷Web开发’第272页。 如果传入的请求有一个名为(例如)admin / book的控制器,Rails将在app / controllers / admin目录中查找名为book_controller的控制器。 也就是说,控制器名称的最后部分将始终解析为名为name_controller.rb的文件,并且任何前导路径信息将用于从app / controllers目录开始浏览子目录。 想象一下,我们的程序有两个这样的控制器组(比如,admin / xxx和content / xxx),并且两个组都定义了一个书籍控制器。 在app / controllers的admin和content子目录中都有一个名为book_controller.rb的文件。 这两个控制器文件都将定义一个名为BookController的类。 如果Rails没有采取进一步措施,这两个类就会发生冲突。 为了解决这个问题,Rails假定目录app / controllers的子目录中的控制器位于以子目录命名的Ruby模块中。 我的问题是:两个book_controller.rb文件怎么会发生冲突? 我有两个不同的URL:…. / admin / book和…. / content / book,它们怎么会发生冲突? 在前一段中明确指出 [..]任何前导路径信息将用于从app / controllers目录开始浏览子目录