我有一个控制器有超过1000行代码.
对了,我没有为这个控制器做代码审查.我根据模块安排我的方法.现在我意识到我的控制器不易维护,所以我想要跟随它
class UsersController < ApplicationController
#Code to require files here
#before filter code will goes here
#############Here i want to call that partial like things. following is just pseudo #########
history module
account module
calendar module
shipment module
payment module
####################################################################
end #end of class
Run Code Online (Sandbox Code Playgroud)
这有助于我维护代码,因为当我更改历史模块时,我确信我的帐户模块未更改.我知道CVS但我更喜欢每个模块的50个副本而不是200个我的users_controller.rb本身.
PS: - 我想肯定答案.请不要回答,你应该为不同的模块使用不同的控制器...... bla ... bla ... bla ...因为我不可能这样做.
编辑: - 我的版本是
rails -v
Rails 2.3.4
ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-linux]
Run Code Online (Sandbox Code Playgroud) 以下是我遇到的问题.我不知道如何将正确的参数传递给此控制器操作.
def get_standards
@standard_children, @temp = Standard.browse(params[:guid])
@parent_standard = params[:guid]
respond_to do |format|
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
describe "Get Standards" do
it "should return correct values" do
@stateOne = mock_model(Standard, description: "beta")
Standard.stub!(:browse).and_return(@stateOne, "temp")
assigns(:standard_children).should == @stateOne
assigns(:parent_standard).should == 'one'
get :get_standards, :params => {guid: 'one'}
end
end
Run Code Online (Sandbox Code Playgroud)
Failure/Error: assigns(:standard_children).should == @stateOne
expected: #<Standard:0x3ffed4e53d88 @name="Standard_1001">
got: nil (using ==)
Run Code Online (Sandbox Code Playgroud) 我试图孤立地测试我的控制器的动作链.具体来说,我想确保我所需的行为适用于我所有控制器的操作.例如,测试我的所有操作都需要身份验证:
context "when not authenticated" do
# single case
describe "GET index" do
it "responds with 401" do
get :index
response.code.should be(401)
end
end
# all of them...
described_class.action_methods.each do |action|
['get', 'put', 'post', 'delete', 'patch'].each do |verb|
describe "#{verb.upcase} #{action}" do
it "responds with 401" do
send verb, action
response.code.should == "401"
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我希望这可行,但事实并非如此.我得到一些ActionController::RoutingErrors.这是因为我的一些路线需要参数,在某些情况下我不提供它们(就像我打电话时post :create).我明白了.但我不明白的是:为什么要重要!?
对于这些测试,路由是一个单独的问题.我关心我的行动链,而不是我的要求(这就是我拥有的routing specs和我request specs的).我不应该关心自己在这个级别的路线限制.
所以我的问题是:有没有办法在不模拟请求的情况下测试动作链?
编辑:一些研究
看起来在TestCase#进程中正在运行路由.这有必要吗?
这个错误涉及什么?我无法弄清楚代码在哪里不正确?
用户Index.html.erb
<%= @events.all.each do |event| %>
<%= if current_user.activities.include?(event.activity) %>
<%= event.activity %>
<%= event.description %>
<%= event.start_time %>
<%= event.end_time %>
<%= event.num_attendees_requested %>
<%= event.location_name %>
<%= event.street_address %>
<%= event.city %>
<%= event.state %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
用户控制器
class UsersController < ApplicationController
def index
@users = User.all
@activities = Activity.all
@events = Event.all
end
def show
@user = current_user
@events = Event.all
@activities = Activity.all
end
Run Code Online (Sandbox Code Playgroud) 我在 Laravel 中遇到交易问题。当我尝试使用以下代码执行此操作时,错误出现在屏幕上,就好像我没有交易一样。
\DB::transaction(function() use ($movement, $movementRows) {
$movement->save();
$movement->rows()->saveMany($movementRows);
});
Run Code Online (Sandbox Code Playgroud)
当我尝试使用下面的代码执行此操作时,尽管第二个对象失败,但会保存第一个对象。
\DB::beginTransaction();
try {
$movement->save();
$movement->rows()->saveMany($movementRows);
\DB::commit();
$success = true;
} catch (\Exception $e) {
$success = false;
\DB::rollback();
}
if ($success) {
// the transaction worked ...
}
Run Code Online (Sandbox Code Playgroud) 我该如何测试:
render view: "create", model: [user: user]
Run Code Online (Sandbox Code Playgroud)
我知道如何测试redirectArgs和东西,但我找不到一个例子来测试这样的东西.似乎文章和东西不顾一切地测试这个....
我决定在我的网站goldhat.org上放置一个登陆页面.我希望用户能够直接访问此页面,如果他们已登录并且未登录则会定向到目标网页.目标网页目前位于此处.如果点击顶部的"浏览网站"链接,它将转到当前的主页.
基本上我想要登陆页面和当前主页共享"www.goldhat.org"网址.我可以看到这对于登录来说这很容易吗?有条件的,但是那些没有登录并浏览网站的人呢.我只想让登陆页面显示一次.
有任何想法吗?
我正在通过一个rspec教程(peepcode教程).我生成了一些脚手架,我希望有人可以帮助解释如何重新编写描述以便为新手阅读更清楚一些.
describe "POST create" do
describe "with valid params" do
it "assigns a newly created weather as @weather" do
Weather.stub(:new).with({'these' => 'params'}) { mock_weather(:save => true) }
post :create, :weather => {'these' => 'params'}
assigns(:weather).should be(mock_weather)
end
end
Run Code Online (Sandbox Code Playgroud)
这行代码是我试图理解的这一行
Weather.stub(:new).with({'these' => 'params'}) { mock_weather(:save => true) }
Run Code Online (Sandbox Code Playgroud)
我从未见过将方法放在括号内.这究竟意味着什么?
{ mock_weather(:save => true) }
Run Code Online (Sandbox Code Playgroud) 我的Rails路由有一个奇怪的问题.我有一个名为Page的控制器和一个名为Page#dashboard的方法
当我尝试访问/ dashboard/1时,页面控制器的仪表板方法永远不会被执行.但令人惊讶的是/pages/dashboard.html.erb呈现得很好.
有人能解释一下为什么吗?
代码详情如下.谢谢
试图访问 - /dashboard/1
的routes.rb
match '/dashboard/:id' => 'page#dashboard'
Run Code Online (Sandbox Code Playgroud)
Page_Controller.rb
class PageController < ApplicationController
before_filter :init
private
def init
puts "init getting executed !!!!!!!!!" #this gets printed on console
end
def dashboard
puts "dashboard getting executed !!!!!!!!!" #this doesnt get printed on console
end
end
Run Code Online (Sandbox Code Playgroud)
viewPage - Pages/dashboard.html.erb
日志如下所示 -
init getting executed !!!!!!!!!
Started GET "/dashboard/8" for 127.0.0.1 at 2012-06-03 00:04:40 +0800
Processing by PageController#dashboard as HTML
Parameters: {"id"=>"8"}
Rendered page/dashboard.html.erb within layouts/page (45.9ms)
Completed …Run Code Online (Sandbox Code Playgroud) 我有一个单页网站使用ruby on rails作为框架.在单页上我有一个
头
第1节
第2节
第3节等
页脚
我遇到的问题是这样,我如何组织布局/视图/控制器.只有一个部分我有一个需要处理的表单,并链接到数据库表(模型).谁能告诉我如何组织我的ROR申请?
controllers ×10
rspec ×3
routing ×2
ruby ×2
testing ×2
database ×1
frameworks ×1
grails ×1
laravel ×1
partial ×1
php ×1
render ×1
scaffold ×1
transactions ×1
views ×1