标签: actioncontroller

Rails ActionController为每个操作执行相同的代码

对于那里的rails专家,我想知道在Web应用程序中的每个操作执行相同代码的位置和方式?如果你能指出我的文章或提供一个简短的代码片段,我将非常感激.

提前感谢任何可以提供帮助的人.

ruby-on-rails actioncontroller

17
推荐指数
2
解决办法
5893
查看次数

Rails 4 has_one关联形式没有建立

我需要一些关于Rails 4如何与has_one和belongs_to关联一起工作的指针.

我的表格没有保存has_one关系

发布模型

class Post < ActiveRecord::Base
  validates: :body, presence: true

  has_one :category, dependent: :destroy
  accepts_nested_attributes_for :category
end

class Category < ActiveRecord::Base
  validates :title, presence: true
  belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)

后控制器

class PostController < ApplicationController
  def new
    @post = Post.new
    @post.build_category
  end

  def create
    @post = Post.new(post_params)
  end

  private

  def post_params
    params.require(:post).permit(:body)
  end
end
Run Code Online (Sandbox Code Playgroud)

表格在Post#new action中

<%= form_for @post do |form| %>

  <%= form.label :body %>
  <%= form.text_area :body %>

  <%= fields_for :category do |category_fields| %>
    <%= category_fields.label …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails form-for actioncontroller strong-parameters ruby-on-rails-4

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

当控制器被子类化时,为什么Rails before_filter被调用了两次?

我在Rails 2.3.5,我有这个问题:

class BaseController < ApplicationController
  before_filter :foo, :only => [:index]
end

class ChildController < BaseController
  before_filter :foo, :only => [:index, :show, :other, :actions]
end
Run Code Online (Sandbox Code Playgroud)

问题是在ChildController上,过滤器被调用两次之前的foo.

我已经尝试了很多关于这个问题的解决方法.如果我不在:index孩子中包含该动作,则永远不会调用该动作.

我找到的解决方案有效,但我认为它非常难看

skip_before_filter :foo
before_filter :foo, :only => [:index, :show, :other, :actions]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来解决这个问题?

ruby inheritance ruby-on-rails before-filter actioncontroller

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

如果before_action返回false,如何执行操作

我知道使用以下代码:

before_action :signed_in?, only: [:new]

该行动new将是否执行signed_in?返回true,而是如果我想的new时候要执行的动作signed_in?返回false,我必须做什么?例如,我是否必须创建一个名为的新方法not_signed_in?

这是我的signed_in?方法

def signed_in?
  !@current_user.nil?
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails callback actioncontroller

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

after_filter用于例外

是否存在类似于after_filter的东西,如果该操作引发异常,它仍会运行?

我正在使用外部记录器(因为我在Heroku上); 响应头被过滤并记录在after_filter中.如果引发异常,则过滤器不会运行,并且我没有响应头数据的日志.

如果我尝试挂钩到log_error或rescue_action_in_public,响应头将不会完成(因为实际的渲染在这些之后被调用).

是否有另一个我可以覆盖的函数,它将在相同的时间被调用到after_filter,但无论是否抛出异常,它总是会运行?

谢谢!

ruby-on-rails exception filter actioncontroller

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

Rails ActionController:request.remote_ip和request.remote_addr之间的区别

在ActionController源中,本地请求定义如下:

def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,如果请求来自特定的IP范围,我想使用不同的逻辑.request.remote_addr和之间有什么区别request.remote_ip,我应该使用哪一个?

client ruby-on-rails ip-address request actioncontroller

12
推荐指数
2
解决办法
4694
查看次数

Rails 3:使用respond_with删除资源的正确方法

我试图通过合并来干扰控制器respond_with.当我这样做时,遵循Railscast中的一些指示,我得到的东西大部分都在工作.问题在于删除资源后的重定向...应该重定向到people_url...而是尝试加载特定资源.

我找到的示例代码看起来像这样......但是它尝试加载刚删除的资源失败了:

# app/controllers/people_controller.rb
class PeopleController < ApplicationController
  respond_to :html, :xml

  def destroy
    @person = Person.find(params[:id])
    flash[:notice] = 'Successfully deleted person.' if @person.destroy
    respond_with(@person)  # <== spec fails here
  end
end
Run Code Online (Sandbox Code Playgroud)

改变最后一行respond_with(@people)也不起作用(虽然我曾希望它会...)

经过深入挖掘并尽力了解事情,我确实让事情发生了(至少看起来如此.规格传递.app功能)用这个:

respond_with(@person, :location => people_url)  # <== now it works
Run Code Online (Sandbox Code Playgroud)

那么,这是处理这个问题的正确方法吗?似乎有了所有'魔法'背后的response_with它会知道删除后它不能重定向到自己?我也认为这个(7种基本的RESTful CRUD方法之一)将是非常基本和基本的,所以很多例子会比比皆是......但我找不到很多,除了那些暗示代码不起作用的代码我.

希望有人可以帮助我理解这里发生的铁轨'魔力'所以当我在路上爆炸时,我不会感到惊讶.

ruby-on-rails actioncontroller respond-with ruby-on-rails-3

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

在我的rails控制器方法中运行线程

我有一组数据,我想在我的rails应用程序内部进行一些计算,每个计算是相互独立的,所以我想对它们进行处理,所以我的响应要快得多.

这就是我所拥有的ATM:

def show

  @stats = Stats.new

  Thread.new {
    @stats.top_brands = #RESULT OF FIRST CALCULATION     
  }

  Thread.new {
    @stats.top_retailers = #RESULT OF SECOND CALCULATION
  }

  Thread.new {
    @stats.top_styles = #RESULT OF THIRD CALCULATION
  }

  Thread.new {
     @stats.top_colors = #RESULT OF FOURTH CALCULATION
  }

  render json: @stats
end
Run Code Online (Sandbox Code Playgroud)

现在,这会为每个成员实例返回一堆空数组@stats,但是,如果我将这些线程连接在一起,它就会运行,但是由于每个线程阻塞而无法实现线程化的目的.

因为我对线程很新,所以我想知道我在这里做错了什么,或者它是否有可能完成我正在尝试做的事情,也就是说,在paralell中运行4个计算并将结果返回给客户端.

谢谢,

ruby multithreading ruby-on-rails actioncontroller

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

如何使用MongoDB中的ActionController :: Live下载CSV数据?

我在这样的控制器中创建了一个CSV下载器

format.csv do
  @records  = Model.all

  headers['Content-Disposition'] = "attachment; filename=\"products.csv\"" 
  headers['Content-Type'] ||= 'text/csv'
end
Run Code Online (Sandbox Code Playgroud)

现在我想创建server sent events以从中下载CSV以进行优化.我知道我可以在Rails中使用它,ActionController::Live但我没有经验.

有人可以向我解释我是怎么做的

  1. 将记录作为批次查询
  2. 添加记录到 stream
  3. sse从浏览器端处理
  4. 将记录写入CSV文件

如果我的任何假设是错误的,请纠正我.帮助我以更好的方式做到这一点.谢谢.

ruby-on-rails actioncontroller export-to-csv server-sent-events

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

Rails 6 - 常量 ActionController::InvalidAuthenticityToken

我正在修改 Rails 6 并且我不断在由 rails 生成的表单上获取 ActionController::InvalidAuthenticityToken,例如(实现 rails 教程书籍注册/登录流程)

<%= form_for(@user, url: 'signup') do |f| %>
     <%= render 'partials/error_messages' %>
     <%= f.label :name, "Nimi" %>
     <%= f.text_field :name %>
     <%= f.label :email, "E-mail" %>
     <%= f.email_field :email %>
     <%= f.label :password, "Parool" %>
     <%= f.password_field :password %>
     <%= f.label :password_confirmation, "Korda parooli" %>
     <%= f.password_field :password_confirmation %>
     <%= f.submit "Loo konto", class: "button-green" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这发生在所有形式上,输出转储看起来像这样

转储

应用程序.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Storebase - kaasaegsed e-poed!</title>
    <%= csrf_meta_tags %> …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails csrf actioncontroller authenticity-token ruby-on-rails-6

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