对于那里的rails专家,我想知道在Web应用程序中的每个操作执行相同代码的位置和方式?如果你能指出我的文章或提供一个简短的代码片段,我将非常感激.
提前感谢任何可以提供帮助的人.
我需要一些关于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
我在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
我知道使用以下代码:
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) 是否存在类似于after_filter的东西,如果该操作引发异常,它仍会运行?
我正在使用外部记录器(因为我在Heroku上); 响应头被过滤并记录在after_filter中.如果引发异常,则过滤器不会运行,并且我没有响应头数据的日志.
如果我尝试挂钩到log_error或rescue_action_in_public,响应头将不会完成(因为实际的渲染在这些之后被调用).
是否有另一个我可以覆盖的函数,它将在相同的时间被调用到after_filter,但无论是否抛出异常,它总是会运行?
谢谢!
在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,我应该使用哪一个?
我试图通过合并来干扰控制器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方法之一)将是非常基本和基本的,所以很多例子会比比皆是......但我找不到很多,除了那些暗示代码不起作用的代码我.
希望有人可以帮助我理解这里发生的铁轨'魔力'所以当我在路上爆炸时,我不会感到惊讶.
我有一组数据,我想在我的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个计算并将结果返回给客户端.
谢谢,
乔
我在这样的控制器中创建了一个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但我没有经验.
有人可以向我解释我是怎么做的
streamsse从浏览器端处理如果我的任何假设是错误的,请纠正我.帮助我以更好的方式做到这一点.谢谢.
ruby-on-rails actioncontroller export-to-csv server-sent-events
我正在修改 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
actioncontroller ×10
ruby-on-rails ×10
ruby ×2
callback ×1
client ×1
csrf ×1
exception ×1
filter ×1
form-for ×1
inheritance ×1
ip-address ×1
request ×1
respond-with ×1