`

Rails 3 in action 读书笔记

阅读更多
那天看到IE有战友贴了这个书,就想找个时间读读,有收获随笔记下来收获

据说这种格式validate可以多个写一起,不用重复
validates :description, :presence => true, :length => { :minimum => 10 }


这个nested很多地方有了,codeschool railscast和guide

project_ticket_path(@project, @ticket)


这个是关联的,就是相当于project_id:integer
rails generate model ticket title:string description:text project:references


初始化一个关联实例
def new
@ticket = @project.tickets.build
end


<% @project.tickets.each do |ticket| %>
<li>
#<%= ticket.id %> - <%= link_to ticket.title, [@project, ticket] %>


没记着steps
Given /^I am signed in as them$/ do
steps(%Q{
Given I am on the homepage
When I follow "Sign in"
And I fill in "Email" with "#{@user.email}"
And I fill in "Password" with "password"
And I press "Sign in"
Then I should see "Signed in successfully."
})
end


let和before的差别是,before是所有context都加载,let只有context里用到user才加载
describe ProjectsController do
  let(:user) do
    user = Factory(:user)
    user.confirm!
    user
  end

  context "standard users" do
    it "cannot access the new action" do
      sign_in(:user, user)
    end
  end

  context "standard users" do
  it "cannot access the new action" do
    sign_in(:user, user)
    get :new
    response.should redirect_to(root_path)
    flash[:alert].should eql("You must be an admin to do that.")
  end
  end

  { "new" => "get",
  "create" => "post",
  "edit" => "get",
  "update" => "put",
  "destroy" => "delete" }.each do |action, method|
  it "cannot access the #{action} action" do
    sign_in(:user, user)
    send(method, action.dup, :id => project.id)
    response.should redirect_to(root_path)
    flash[:alert].should eql("You must be an admin to do that.")
  end
  end

...
end


其中用到的Factory Girl定义如下
#factories/user_factory.rb:
Factory.define :user do |user|
  user.sequence(:email) { |n| "user#{n}@ticketee.com" }
  user.password "password"
  user.password_confirmation "password"
end
#其中sequence用于产生不重复的数字,以便生成email不重复

rspec要加载上Fatorygirl定义的User,还要处理一个lib调用include上
#spec/support/factories.rb
#spec/controllers/projects_controller_spec.rb
Dir[Rails.root + "factories/*.rb"].each do |file|
  require file
end

Rspec用到了sign_in所以要加载devise到rspec
RSpec.configure do |config|
  config.mock_with :rspec
  config.include Devise::TestHelpers
end


说到rspec看这个更舒服
http://pure-rspec-scotruby.heroku.com/

cucumber里检查页面是否存在元素context_contain capybara的语法
#features/step_definitions/link_steps.rb
Then /^I should see the "([^\"]*)" link$/ do |text|
  page.should(have_css("a", :text => text),
  "Expected to see the #{text.inspect} link, but did not.")
end
Then /^I should not see the "([^\"]*)" link$/ do |text|
  page.should_not(have_css("a", :text => text),
  "Expected to not see the #{text.inspect} link, but did.")
end


检查是否admin

- admins_only do
  = link_to "New Project", new_project_path

def admins_only(&block)
  block.call if current_user.try(:admin?)
  nil
end
分享到:
评论

相关推荐

    Ruby_On_Rails笔记

    综上所述,Ruby on Rails的笔记内容涵盖了从安装Rails环境到创建和运行一个简单的Rails项目的基础知识,这些内容对于初学者来说是学习Rails框架的极好入门材料。通过对这些知识点的学习,初学者可以快速了解Rails的...

    Ruby_on_Rails笔记

    ### Ruby on Rails 笔记知识点总结 #### 一、引言 在《Ruby on Rails笔记》中,作者陈刚分享了他在学习Ruby on Rails过程中的经验与心得。这份笔记不仅包含了作者的学习历程和个人体会,还汇集了他在学习过程中遇到...

    web敏捷开发rails笔记

    &lt;li&gt;Time in one hour: &lt;%= 1.hour.from_now %&gt;&lt;/li&gt; ``` - 使用循环: ```html &lt;% 3.times do %&gt; ho! ``` **安全输出**: - 使用`h()`方法来转义输出内容,防止XSS攻击: ```html Email: ("Ann&...

    Ruby-on-Rails-101:Ruby on Rails 笔记摘自 WDI HKV 和其他来源。 比如,lynda的在线Rails教程

    本笔记摘录自WDI HKV以及lynda.com的在线Rails教程,旨在提供一个全面且深入的学习指南。 ### 1. **基础概念** - **MVC架构**:Rails采用Model-View-Controller(MVC)设计模式,将业务逻辑(Model)、用户界面...

    elixir_in_action:SašaJurić撰写的《 Elixir in Action》第二版-我的笔记和解决方案

    总的来说,《Elixir in Action》第二版是一本深入学习Elixir语言和实践的宝典,配合作者的笔记和解决方案,将帮助你掌握Elixir的核心概念和技术,从而能够构建出强大且高效的系统。无论你是初涉Elixir,还是希望提升...

    ActionView问题需求跟踪工具 v1.15.1.zip

    3. **辅助方法**:ActionView提供了一系列内置辅助方法,如`link_to`用于创建链接,`form_for`用于构建表单,以及`content_tag`用于生成HTML标签。这些辅助方法简化了HTML生成过程。 4. **布局和部分**:ActionView...

    rails-github-actions-example:具有GitHub Actions示例的Rails CI管道

    在Rails项目中简单使用github action信息网路:Rails 6.0.0 数据库:PostgreSQL 测试:Rspec笔记# initialize Rails apprails new rails-github-actions-example --skip-turbolinks --skip-spring --database=...

    Ruby:Ruby on Rails 书

    在“Ruby-master”这个文件夹中,很可能包含了与Ruby或Rails相关的源代码、笔记、练习或者项目。通常,一个GitHub仓库的主分支名为master,这里可能是作者学习过程中的主分支。通过浏览和分析这些文件,读者可以深入...

    一些RJS资源和演示入门教程

    在Rails中,RJS通过ActionView的辅助方法与控制器的action配合工作,生成JavaScript代码,这些代码可以在客户端执行,从而动态改变网页。 描述中提到的“博文链接:https://hlee.iteye.com/blog/354530”是一个可能...

    password_reset_lab

    #Mailer 笔记 ##LetterOpener 让我们首先安装一个 gem,它允许我们在 Rails 中调试发送的邮件消息。 将letter_opener gem 添加到您的开发组。 group :development do gem "letter_opener" end 让我们在config/...

    ruby介绍及相应的ruby demo示意源码,供大家参考学习

    Rails提供了许多开箱即用的功能,如ActiveRecord(ORM)、ActionController和ActionView,使得开发者能够快速创建数据库驱动的Web应用。 现在,我们来看一下“ruby demo”可能包含的一些示例代码: 1. `hello_...

Global site tag (gtag.js) - Google Analytics