ネット偽善者でもいいじゃない

悩んでるなら面白いマンガ読もう

Rails チュートリアル 9章 演習

Railsチュートリアル第9章 9.6 演習

英語版の解答はありました

Hartl's Rails Tutorial - Solutions for Ch 9 Exercises · Valhalla

 

2. の

リスト9.3の Gravatarの [change] リンクを改造し、別ウィンドウ (または別タブ) で開くようにしてください。ヒント: Webを検索してみましょう。この目的にうってつけの堅牢なメソッドが見つかるはずです。_blankという文字も一緒に検索してみてください。

の部分

検索したら、どうやら _blank というのを使うらしい

下記を参照

ruby on rails - Open link in new tab with link_to - Stack Overflow

 

一応、答えとしては

app/views/users/edit.html.erbの

<%= gravatar_for @user %>

<a href="http://gravatar.com/emails">change</a>
</div>

 

のhrefのところに

 

<a href="http://gravatar.com/emails" target="_blank">change</a>

 

と、target="_blank" を追加してやればよい

これだけで新規タグでリンクが開くようになります

 

target = .......

はHTMLのタグによるものなので

HTMLのリファレンスが参考になります

_self とか _top など別の属性もあるので

参考に

<a>-HTML5タグリファレンス

 

9.6.3 ProfileやSettingのリンクが無いことをテストする

一応、こちらのページに解答例を見つけたのですが

Railsチュートリアル 4.0版の演習について、自分なりの解答をまとめてみた - メモ的な思考的な

FactoryGirlを生かした解答例を自分なりに考えてみました

(Rspecは3系でやってるので、it {should ....}ではなく it {is.expected.to ....}になってます)

 

spec/requests/authentication_pages_spec.rb に対して

require 'spec_helper'

describe "Authentication", :type => :request do

subject { page }

describe "signin page" do
  let(:user) {FactoryGirl.create(:user)}
  before { visit signin_path }

  it { is_expected.to have_content('Sign in') }
  it { is_expected.to have_title('Sign in')}
  it {is_expected.not_to have_title(user.name)}
  it {is_expected.not_to have_link('Users', href: users_path)}
  it {is_expected.not_to have_link('Profile', href: user_path(user))}
  it {is_expected.not_to have_link('Settings', href:edit_user_path(user))}
  it {is_expected.not_to have_link('Sign out', href: signout_path)}

end

describe "sign in" do
  before { visit signin_path}

    describe "with invalid information" do
    let(:user) {FactoryGirl.create(:user)}
      before { click_button "Sign in"}

      it {is_expected.to have_title('Sign in')}
      it {is_expected.to have_selector('div.alert.alert-error', text: 'Invalid')}
      it {is_expected.not_to have_title(user.name)}
      it {is_expected.not_to have_link('Users', href: users_path)}
      it {is_expected.not_to have_link('Profile', href: user_path(user))}
      it {is_expected.not_to have_link('Settings', href:edit_user_path(user))}
      it {is_expected.not_to have_link('Sign out', href: signout_path)}


describe "after visiting another page" do
before { click_link "Home" }
it {is_expected.not_to have_selector('div.alert.alert-error') }
end
end

 のように、赤字の部分を追加した

(他の人の解答と違うのでここは自信ないですが一応青信号になります)