Rails チュートリアル 9章 演習
英語版の解答はありました
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 など別の属性もあるので
参考に
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
のように、赤字の部分を追加した
(他の人の解答と違うのでここは自信ないですが一応青信号になります)