小编Nat*_*han的帖子

不了解类,模块和类<< self方法

我有以下代码:

class MyClass  
  module MyModule
    class << self

      attr_accessor :first_name

      def myfunction
        MyModule.first_name = "Nathan"
      end

    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我这样调用方法时myfunction,它工作正常:

> me = MyClass::MyModule.myfunction
=> "Nathan"
> me
=> "Nathan"
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除class << self并添加self.前缀myfunction,它不起作用.

例如:

class MyClass  
  module MyModule

    attr_accessor :first_name

    def self.myfunction
      MyModule.first_name = "Nathan"
    end

  end
end


> me = MyClass::MyModule.myfunction
NoMethodError: undefined method `first_name=' for MyClass::MyModule:Module
Run Code Online (Sandbox Code Playgroud)

我正在尝试理解这种class << self方法.我认为这是一种self.方法,为它内部的所有方法添加前缀,但如果这是真的,为什么不删除它并self.手动为每个方法添加前缀?

在此先感谢您的帮助.

ruby ruby-on-rails

8
推荐指数
1
解决办法
2087
查看次数

有没有办法使用simple_form for Rails提交ajax/json请求

使用标准的Rails form_for,我能够通过select和collection_select帮助程序传递ajax请求:

<%= address.collection_select :country, @countries, :id, :name, {:include_blank => false}, "data-remote" => true, "data-url" => "/ajax/states", "data-type" => :json  %>
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何使用simple_form来做到这一点

ajax ruby-on-rails simple-form

7
推荐指数
3
解决办法
2万
查看次数

Aptana"选择无法启动,最近没有发布."

每次单击"运行方式"按钮,我都会收到以下消息.

"选择无法启动,最近没有发布."

如果我选择"运行方式"按钮附近的下拉箭头,并选择新配置选项(这是我设置为使用localhost启动的配置)......它可以工作.但为什么"运行方式"按钮默认不是这个?

或者更好的是,我如何确保"运行方式"按钮默认为此?

**更新**

我解决了这个问题..请参阅下面的答案.

aptana

6
推荐指数
1
解决办法
2万
查看次数

有没有办法与工头一起使用figaro?

我不想使用dotenv,但真的想使用工头宝石.它会与figaro一起使用吗?

目前我使用自己的yaml文件来加载env变量,并将它们存储在.env目录下的项目根目录中.似乎工头试图读取.env文件,并在我的.env目录中窒息.

所以,或者使用figaro,有没有办法改变工头寻找我的env变量的地方?

ruby-on-rails figaro-ruby

6
推荐指数
1
解决办法
282
查看次数

class <<模块中的表示法

我正在尝试将一个模块混合到一个类中,我想要一些方法作为类方法,其他方法作为实例方法.

但是,我不想同时include extend模块.我宁愿include这么做.

当我用这种表示法包装我想成为类方法的方法时,它可以工作:

class <<
  # ...
end
Run Code Online (Sandbox Code Playgroud)

但是,当我使用这种表示法时,它不起作用:

class << self
  # ...
end
Run Code Online (Sandbox Code Playgroud)

我怀疑self关键字是建立一个与模块的显式绑定,而不是它混入的类.但我没有看到任何建议self在使用class <<表示法时关闭关键字的文档.

有谁知道这是怎么回事?


更新:以下是一些示例代码,以便更清晰:

module M
  class <<
    def class_method
      puts "From inside the class_method"
    end
  end

  def instance_method
    puts "From inside the instance_method"
  end
end

class Object
  include M
end

class C
end


C.class_method

obj = C.new
obj.instance_method
Run Code Online (Sandbox Code Playgroud)

ruby module metaprogramming mixins

5
推荐指数
1
解决办法
198
查看次数

如何在Capybara 2.4.1中访问cookie和会话

我正在将Rails 4与以下宝石一起使用:

  • Guard-rspec(4.3.1)
  • rspec(3.0.0)
  • rspec核心(3.0.3)
  • rspec-期望(3.0.3)
  • rspec-mocks(3.0.3)
  • rspec-rails(3.0.2)
  • rspec支持(3.0.3)
  • 水豚(2.4.1)
  • capybara-webkit(1.1.0)

Capybara在正常情况/示例中可以按预期工作,但是当我想访问cookie或会话时,会出现NameError:

undefined local variable or method `session'
Run Code Online (Sandbox Code Playgroud)

我有一个自定义类,用于存储cookie数据并检索它以记住有关用户的信息,然后在屏幕上显示某些信息。

但是我似乎无法通过测试,也无法查看Cookie或会话。

是否需要嘲笑?我怎样才能做到这一点?

cookies rspec ruby-on-rails capybara

5
推荐指数
1
解决办法
1475
查看次数

片段缓存与页面缓存

我想知道片段缓存如何抵御页面缓存。显然,缓存整个页面会更快,因为Web服务器可以在不涉及Rails的情况下为整个页面提供缓存,但是片段缓存的速度要慢多少?

例如,假设我有一个购物车应用程序,并且在标题中需要显示购物车中的商品数量。

我可以缓存整个页面,并使用JS和cookie使标头显示为动态,或者可以对标头以外的所有内容进行分段存储。

现在,通过全页缓存,我的负载基准测试显示每个请求大约70ms,每分钟大约7000个请求。

我知道这没有绝对值,但是有人可以对片段缓存方法采取哪种类型的匹配进行评估吗?

谢谢

caching ruby-on-rails

5
推荐指数
1
解决办法
114
查看次数

如何将MAILTO添加到Ansible的cron.d cron_file中?

我正在使用Ansible使用cron_file参数创建cron.d文件.

但是如何将MAILTO添加到文件中?

似乎env = true仅适用于crontab,而不适用于cron.d文件.我错了吗?

cron ansible

5
推荐指数
1
解决办法
3037
查看次数

将 ref 数组传递给子组件时,如何使 ref 数组在 Vue 3 组合 API 中工作?

我有以下带有这两个组件的待办事项应用程序:AppTodo

应用程序.vue

<template>
  <div class="todo-list">
    <div :key="index" v-for="(todo, index) in state.todos">
      <Todo :todo="todo" :state="state" />
    </div>
  </div>
</template>

<script>
import { reactive } from '@vue/composition-api';
import Todo from './components/Todo.vue';

export default {
  components: {
    Todo
  },
  setup() {
    let state = reactive({
      todos: [
        { text: 'Learn about Vue', isCompleted: false },
        { text: 'Meet friend for lunch', isCompleted: false },
        { text: 'Build really cool todo app', isCompleted: false }
      ]
    });

    return { state }; …
Run Code Online (Sandbox Code Playgroud)

vue.js vuejs3

5
推荐指数
1
解决办法
1万
查看次数

如何防止儿童重定向时多次调用 React Router 6 中的布局加载器?

我有以下路由器配置:

const router = createBrowserRouter([
  {
    element: <Layout />,
    loader: loaderFunction,
    children: [
      {
        path: '/home',
        element: <HomePage />
      },
      {
        path: '/about',
        element: <AboutPage />
      },
      {
        path: '/contact',
        element: <ContactPage />
      },
    ],
    errorElement: <ErrorPage />
  },
  {
    path: '*',
    element: <NotFoundPage />
  }
]);
Run Code Online (Sandbox Code Playgroud)

该配置有一个<Layout />父级,以及多个子级路由(及其各自的组件)。

这样做的原因是,如果用户直接输入这些路径中的任何一个,都会发生相同的行为。

即,loaderFunction应该获取数据。然后在数据<Layout />进行解析和分析......然后使用这些信息,使用如下条件重定向用户:

if (conditionA && pathname !== '/about') {
  return <Navigate to="/about" replace />
}

if (conditionB && && pathname !== '/contact') { …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router

5
推荐指数
1
解决办法
2836
查看次数