小编Vee*_*Vee的帖子

Rails Activerecord Relation:使用子查询作为SQL select语句的表

有人可以帮我弄清楚如何使用Rails编写以下SQL(我使用的是Rails 4)Activerecord方法?我知道你可以用find_by_sql做到这一点,但我想保留活动的记录关系.这是我正在尝试创建的postGreSQL数据库的sql:

SELECT * FROM 
(SELECT DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.id, table_b.time
FROM table_1
LEFT OUTER JOIN table_b ON table_a.id = table_b.id
ORDER BY table_a.id, table_b.time asc) AS subquery
ORDER BY alias_a asc
Run Code Online (Sandbox Code Playgroud)

对于我的子查询,我有以下内容(它生成上面子查询的sql):

@subquery = table_a.select("DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time")     
@subquery = @subquery.joins("LEFT OUTER JOIN table_b ON table_a.id = table_b.id")
@subquery = @subquery.order("table_a.id, table_b.time asc")
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何编写一个使用@subquery作为外部select语句的表的select语句.

sql postgresql ruby-on-rails subquery ruby-on-rails-4

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

指定传递给JSON对象的Rails对象的属性

我在滑轨的对象具有属性A,B,C,d,和E.当通过这个对象返回给客户端通过一个JSON对象,我怎样才能告诉导轨控制器只包括属性A和d在JSON对象?

在我的Users控制器中,我的代码如下:

    @user = User.find(params[:id])

    respond_to do |format|
        format.html
        format.json { render :json => @user}
    end
Run Code Online (Sandbox Code Playgroud)

但是,此代码有效,返回的JSON对象包含@user对象的所有属性.在将任何内容发送回客户端之前,如何限制JSON对象中包含的属性?

更新:lucapette提供了一些关于幕后发生的事情的好背景.由于有时我可能想要返回所有属性,我最终使用以下代码:

    format.json { render :json => @user.to_json(:only => ["id"])}
Run Code Online (Sandbox Code Playgroud)

attributes json ruby-on-rails object

10
推荐指数
1
解决办法
6334
查看次数

SwiftUI - 带有条件闭包的 if let 的替代方案

我正在尝试在 SwiftUI 中实现以下内容:

struct PersonView: View {

    @State private var age: Int? = 0

    var body: some View {
        VStack {
            Text("Just a test")
            if let self.age > 0 {
                Text("Display Age: \(age)")
            } else {
                Text("Age must be greater than 0!")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在 SwiftUI 中,会if let导致以下错误:

包含控制流语句的闭包不能与函数构建器“ViewBuilder”一起使用

因此,在研究了这个主题之后,我遇到了一个.map用于解开age可选项的建议。因此,我已修改VStack为如下代码:

Text("Just a test")
self.age.map {elem in
    if elem > 0 {
        Text("Display Age: \(elem)")
    } else {
        Text("Age must be …
Run Code Online (Sandbox Code Playgroud)

closures view optional conditional-statements swiftui

10
推荐指数
3
解决办法
8428
查看次数

无法验证证书 - 请设置'ENV ['SSL_CERT_FILE'] = path_to_file'

我有一个使用Carrierwave上传文件的Rails 4应用程序.安装Fog以将文件上传到Amazon 3后,我在上传文件时开始收到以下错误:

Excon::Errors::SocketError in VideosController#create

Unable to verify certificate, please set `Excon.defaults[:ssl_ca_path] = path_to_certs`, `ENV['SSL_CERT_DIR'] = path_to_certs`, `Excon.defaults[:ssl_ca_file] = path_to_file`, `ENV['SSL_CERT_FILE'] = path_to_file`, `Excon.defaults[:ssl_verify_callback] = callback` (see OpenSSL::SSL::SSLContext#verify_callback), or `Excon.defaults[:ssl_verify_peer] = false` (less secure).
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为我已将"SSL_CERT_FILE"添加到我的环境路径(通过控制面板在用户和系统变量下),将其设置为c:/RailsInstaller/cacert.pem(并重新启动我的计算机).

当我的控制器在controllers/videos_controller中调用@ video.save时,错误就出现了:

class SessionsController < ApplicationController

def create
  @video = Video.new(video_params)
  if @video.save
    redirect_to videos_path, notice: "Video has been uploaded."
  else
    render "new"
  end
end


private

def video_params
  params.require(:video).permit(:name, :attachment) 
end

end
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上,使用ruby 1.9.3p484和RubyGems 2.2.2.有人可以帮我理解这个错误的原因以及如何解决它?

ssl ruby-on-rails environment-variables amazon-s3 carrierwave

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

Git - 用远程分支替换本地分支

我知道这个问题已被问到,但我似乎无法完全用我的远程分支替换我的本地分支.我在我的本地分支机构安装了第三方插件,但是在删除安装时遇到了问题.因此,我想用分支的远程版本"重新开始".该分支在本地称为"dev",远程称为"origin/dev".我尝试了三种用远程版本替换本地分支的方法:

1. git reset HEAD --hard

2. git reset --hard origin/dev

3. git checkout dev
   git fetch
   git reset --hard origin/dev
Run Code Online (Sandbox Code Playgroud)

但是在执行上面的git命令后查看本地代码,我仍然可以从插件中看到剩余的文件和文件夹.

使用git status,我明白了"Your branch is up-to-date with 'origin/dev'. Nothing to commit, working directory clean".

使用git status --ignored,我得到太多的文件列出...基本上我的.gitignore文件中的所有内容我相信.

我只想要远程开发分支中存在的代码而不需要其他内容.

有人可以帮忙吗?

更新:

事实证明,我得到的错误是由于目录中的一堆文件造成的root/var/cache/*.我的.gitignore文件包含以下条目:

/var/*
!/var/package
var/session/*
Run Code Online (Sandbox Code Playgroud)

尝试从远程恢复本地开发分支的可能方法(在上面的问题中列出以及下面提出的解决方案),该root/var/cache目录仍然存在; 在我的应用程序再次开始运行之前,我不得不手动删除它.查看github,远程dev分支不包含'root/var/cache . Can anybody tell me whyroot/var/cache`没有响应git命令用于替换远程版本的本地分支?

git git-remote git-branch

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

Rails 4 - 在SQL查询中使用LIKE运算符防止SQL注入

我想对我的Rails 4应用程序使用以下查询,但我担心SQL注入攻击:

@persons = People.where("persons.name LIKE ?", "%#{params[:search]}%")
Run Code Online (Sandbox Code Playgroud)

有人能告诉我写上述陈述的安全方法吗?我尝试了以下但不确定它是否是SQL注入证明:

search = "%" + params[:search] + "%"
@persons = People.where("persons.name LIKE ?", search)
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql-injection params ruby-on-rails-4 sql-like

4
推荐指数
2
解决办法
5588
查看次数

Swift 3 - 覆盖UINavigationController的初始化程序以设置rootviewcontroller

我正在使用Swift 3来覆盖使用rootviewcontroller初始化我的导航控制器的init方法(并将rootviewcontroller委托设置为self).但是,我收到以下错误:

调用中的参数标签不正确(有'rootViewController:',期望'编码器:')

class NavigationController: UINavigationController, RootViewControllerDelegate {

    let rvc = RootViewController()

    convenience init() {
        self.init(rootViewController: rvc) // Incorrect argument label in call (have 'rootViewController:', expected 'coder:')
        self.rvc.delegate = self
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下我做错了吗?我最初尝试使用

覆盖func init()

但Xcode最终让我将其转换为

方便的init()

inheritance overriding initialization ios swift

4
推荐指数
1
解决办法
1879
查看次数

在 Swift 中使用 Obj-C 完成块

在 Objective-C 中,我有一个完成块类定义为:

文件.h

typedef void (^MYCompletionBlock)(BOOL success, NSDictionary *result, NSError *error);
Run Code Online (Sandbox Code Playgroud)

然后,在 Swift 文件中,我尝试使用完成块,如下所示:

斯威夫特.斯威夫特

class MyClass: NSObject{
     ...

     func MyFunction() -> Void {
          ...
          objcMethod(param1, withCompletion: {(MYCompletionBlock) -> Void in
               if (success){ // Error:"Use of unresolved identifier 'success'"
               }
          }
          ... 
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到错误:“使用未解析的标识符‘成功’”。

我也尝试过以下方法:

objcMethod(param1, withCompletion: {(success:Bool, result: NSDictionary, error:NSError) -> Void in
     if (success){ // Error:"Cannot convert value of type '(Bool, NSDictionary, NSError) -> Void' to expected argument type "MYCompletionBlock!" 
     }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解如何在 Swift 中正确指定 …

objective-c swift completion-block

3
推荐指数
1
解决办法
3662
查看次数

Vue 3 组合 api - 计算属性返回未定义

使用 Vue 3 组合 API,如何返回属性的计算值firstDigitthis计算属性中的关键字是,undefined但是当我省略时this,我会收到错误fourDigits is not defined

<script setup>
import { computed, reactive } from 'vue'

const input = reactive({
    fourDigits: Array(1,2,3,4),
    firstDigit: computed(() => {
      return this.fourDigits[0] <===== `this` is undefined but if I leave `this` out, then `fourDigits` is undefined.
    })
</script>

<template>
   <div>
     <pre>
       {{JSON.stringify(input.firstDigit, null, 2)}}
     </pre>
   </div>
</template>
Run Code Online (Sandbox Code Playgroud)

this vue.js computed-properties vuejs3 vue-composition-api

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

在 Rails 4 中动态创建哈希键名

是否可以动态创建散列的键名?我正在传递以下哈希参数:

params[:store][:store_mon_open(5i)]
params[:store][:store_mon_closed(5i)]
params[:store][:store_tue_open(5i)]
params[:store][:store_tue_closed(5i)]
.
.
.
params[:store][:store_sun_open(5i)]
params[:store][:store_sun_closed(5i)]
Run Code Online (Sandbox Code Playgroud)

为了检查每个参数是否存在,我使用了两个数组:

days_of_week = [:mon, :tue, ..., :sun]
open_or_closed = [:open, :closed]
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法弄清楚如何动态创建 params 哈希(第二个键(带有数组。这是我到目前为止所拥有的:

days_of_week.each do |day_of_week|
  open_or_closed.each do |store_status|
    if !eval("params[:store][:store_#{day_of_week}_#{store_status}(5i)").nil
      [DO SOMETHING]
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法,包括 eval 方法(如上所列),但 rails 似乎不喜欢“5i”周围的括号。任何帮助是极大的赞赏!

arrays parameters hash ruby-on-rails dynamically-generated

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