小编Kar*_*lak的帖子

登录后重定向到以前的URL - Rails

对于我正在编写的应用程序,我使用简单的手工身份验证(如Railscast.com上所述).使用Ryan Bates的NiftyGenerators gem中的一些代码,我有一个身份验证模型,它有一些有用的身份验证方法.该模块包含在内application_controller.rb.

我想要使​​用的方法之一是调用redirect_to_target_or_default.我知道这是我需要将用户重定向到他们经过身份验证后所在的页面,但我不知道应该在哪里调用此方法?如果有人能给我一个如何使用这种方法的想法,我将不胜感激.

ControllerAuthenticaion模块代码

module ControllerAuthentication
  # Makes these methods helper methods in the controller that includes this module.
  def self.included(controller)
    controller.send :helper_method,
      :current_admin, :logged_in?,
      :redirect_to_target_or_default
  end 

  def current_admin
    @current_admin ||= Admin.find(session[:admin_id]) if session[:admin_id]
  end

  def logged_in?
    current_admin
  end

  def login_required
    unless logged_in?
      store_target_location
      redirect_to login_url,
        :alert => "You must first log in before accessing this page."
    end
  end 
  def redirect_to_target_or_default(default, *args)
    redirect_to(session[:return_to] || default, *args)
    session[:return_to] = nil
  end 
  def redirect_to_or_default(target, *args)
    redirect_to(target || …
Run Code Online (Sandbox Code Playgroud)

authentication ruby-on-rails

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

自动填写Rails中的表单字段?

假设您有一个简单的表单来在您的应用程序中创建新的文章对象.

<% form_for @article do |f| %>
<p>
  name:<br />
  <%= f.text_field :name  %>
</p>
<p>
  link:<br />
  <%= f.text_field :link %>
</p>

<p>
  <%= submit_tag %>
</p>
Run Code Online (Sandbox Code Playgroud)

我正在使用RSS提要解析器Feedtools来获取文章名称,但我似乎无法从其他地方可访问的数据中自动填写表单字段.假设文章的名称可以访问params[:name].如何在不需要用户输入文章的情况下将文章的名称从params[:name](或params[:link]为此)获取到表单字段中?我不想自动创建文章对象,因为用户可能想稍微修改名称.

forms ruby-on-rails

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

Rspec:如何使用expect接收尚不存在的资源?

在通过发布请求调用的操作中,我创建资源调用并使用创建的资源作为参数RequestOffer发送电子邮件:ActionMailer

@request_offer = RequestOffer.new(request_offer_params)
if @request_offer.save
    RequestOfferMailer.email_team(@request_offer).deliver_later
end
Run Code Online (Sandbox Code Playgroud)

当我的控制器规范时,我想测试是否使用以资源作为参数的RequestOfferMailer方法调用我的控制器。email_team@request_offer

当我想要 user 时expect(XXX).to receive(YYY).with(ZZZ),我发现的唯一方法是在发出 POST 请求之前声明我的期望。然而,ZZZ是由这个POST请求创建的,所以我之前没有办法设定我的期望。

# Set expectation first
message_delivery = instance_double(ActionMailer::MessageDelivery)

# ZZZ used in .with() does not exist yet, so it won't work
expect(RequestOfferMailer).to receive(:email_team).with(ZZZ).and_return(message_delivery)
expect(message_delivery).to receive(:deliver_later)

# Make POST request that will create ZZZ
post :create, params
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

ruby rspec ruby-on-rails

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

如何在Heroku上打印环境变量?

我想打印在我的Heroku服务器上设置的所有环境变量。我该如何仅使用命令行呢?

heroku environment-variables

4
推荐指数
3
解决办法
456
查看次数

如何使用 RSpec 制作共享示例并使用参数化代码进行测试而不使用 eval 方法?

我在 RSpec 中有一个共享示例,它测试 SMS 发送。在我的应用程序中,我有几个发送短信的方法,所以我想参数化我测试的代码,以便我可以将我的共享示例用于我的所有方法。我发现做到这一点的唯一方法是使用eval函数:

RSpec.shared_examples "sending an sms" do |action_code|
  it "sends an sms" do
    eval(action_code)
    expect(WebMock).to have_requested(**my_request**).with(**my_body**)
  end
end
Run Code Online (Sandbox Code Playgroud)

所以我可以这样使用这个例子:

it_behaves_like "sending an sms",
  "post :accept, params: { id: reservation.id }"

it_behaves_like "sending an sms",
  "post :create, params: reservation_attributes"
Run Code Online (Sandbox Code Playgroud)

在不使用函数的情况下如何实现这一目标eval?我尝试将模式与yield命令一起使用,但由于范围的原因它不起作用:

失败/错误:post:create,params:reservation_attributes 在示例组(例如 a或块)reservation_attributes上不可用。它只能从单个示例(例如块)中或在示例范围内运行的构造(例如,, 等)中获得。describecontextitbeforelet

rspec ruby-on-rails dry

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

如何通过 graphQL 和 AWS AppSync 发送 JSON 数组以将数据添加到 Dynamo Table?

我想要做的是通过 AppSync 从 React Native 应用程序发送数据,以便我可以更新 dynamo 表上的用户数据。我可以执行我所有的 CRUD 操作,而不是数据列表。当我尝试时,我收到一个错误,指出我发送的不是有效的 JSON。但是,当我将输入通过 JSON linter 时,我的输入将作为有效的 JSON 传递。

为了尝试解决这个问题,我已将输入流程更改为最简单的流程。最初我是从本地缓存的解析 JSON 字符串中提取我的 JSON。我认为 JSON.parse(obj) 函数可能存在问题。那是站不住脚的。因此,我将所有输入从 JS 对象移到了一个 JSON 中,该 JSON 未预先存储在变量中,而是直接传递给我正在使用的 API(https://aws-amplify.github.io/docs /js/api)。

在这不起作用之后,我想也许我的 GraphQL Schema 对于我发送的对象类型是错误的,但没有发现任何问题。

我在 AppSync 中使用 GraphQL 的架构定义如下:

input CreateUserInput {
  email: String!
  data: AWSJSON
}
Run Code Online (Sandbox Code Playgroud)

我发送的请求如下:

const dbReturn = await API.graphql(graphqlOperation(
  mutations.createUser, {
    input: {
      "email": "fake.email@atdot.com",
      "data": [{
        "num": 34,
      }]
    }
  }
));
Run Code Online (Sandbox Code Playgroud)

错误消息说:

“变量‘数据’的值无效。无法将 [{num=34}] 解析为有效的 JSON。”

令我困惑的是,这"[{num=34}]"不是我给它的输入。我正在发送它"[{"num": 34}]"是有效的 …

javascript amazon-dynamodb aws-appsync

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

切换月份后,Fullcalendar无法显示新事件

我向fullcalendar添加了一个新事件,它显示得很好,但是当我下个月转回去时,它就消失了!但旧的事件显示得很好,为什么?如何显示所有活动?

细节如:

  1. 我有两个事件:event1,event2来自数据库,当FullCalendar初始化时,我将它们添加到日历中,显示良好.
  2. 然后我添加另一个事件:event3到日历,可以很好地显示.
  3. 我下个月去.
  4. 我切换回来,我发现只显示了event1和event2,而event3消失了?

有人能帮帮我吗?谢谢!

events fullcalendar

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

AWS S3,上传后从本地目录删除文件

我在一个驱动器的不同目录中都有备份文件。这些目录中的文件可能很大,可达 800GB 左右。所以我有一个批处理文件,其中包含一组将文件上传/同步到 S3 的脚本。

请参阅下面的示例:

aws s3 sync R:\DB_Backups3\System s3://usa-daily/System/ --exclude "*" --include "*/*/Diff/*"

上传时间可能会有所不同,但到目前为止一切都很好。

我的问题是,如何编辑脚本或创建一个新脚本来检查 s3 存储桶中的文件是否已上传,并且仅当文件已上传时才从本地驱动器中删除它们,如果没有将它们保留在驱动器上?

(理想情况下它会检查每个文件)

我不熟悉 aws s3 或可以执行此操作的 aws cli 命令吗?如果我说得很清楚或者您需要更多详细信息,请告诉我。

任何帮助将不胜感激。

powershell batch-file amazon-s3 amazon-web-services aws-cli

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

自定义文件而不是 docker-compose.yml

我开始使用 Docker 处理一个新项目,我可以看到那里没有docker-compose.yml文件,但有一些文件docker-compose.myname1.ymldocker-compose.myname2.yml例如 , 。尝试运行时docker-compose up出现错误:

ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml
Run Code Online (Sandbox Code Playgroud)

所以我想知道 Docker 项目是否可以在没有该docker-compose.yml文件的情况下运行,如果可以,应该满足什么条件。也许这是某些特定版本或环境的问题?

docker docker-compose

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

如何使用表的别名在 ActiveRecord 中进行 SQL 查询?

我想在 Rails 中对 ActiveRecord 进行这样的查询Services

SELECT *
FROM "services" AS s
WHERE /* part using 's' alias */
Run Code Online (Sandbox Code Playgroud)

通常我只会写Service.where(/* where part */),但我需要设置我的别名。

我尝试运行ActiveRecord::Base.connection.execute(query),但结果不被识别为Service

我该如何处理?

sql postgresql ruby-on-rails rails-activerecord

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