javascriptで、ページ遷移時にalertを表示したくて下記ページ等を色々と調べた。
// ページ遷移時にalertを表示 $(window).on('beforeunload', function(e) { return 'タスクが消えてしまいますが、ページから離れてもよろしいですか?'; });
alertは表示出来たけど、任意のメッセージが設定できない・・・。
なんだかchromeの仕様みたいなので、あきらめる。
javascriptで、ページ遷移時にalertを表示したくて下記ページ等を色々と調べた。
// ページ遷移時にalertを表示 $(window).on('beforeunload', function(e) { return 'タスクが消えてしまいますが、ページから離れてもよろしいですか?'; });
alertは表示出来たけど、任意のメッセージが設定できない・・・。
なんだかchromeの仕様みたいなので、あきらめる。
RailsTutorial中にstack level too deepでハマったのでメモ
現在ログインしているユーザの取得処理とその呼び出し元のメソッド名が重複していた。
class MicropostsController < ApplicationController before_action :logged_in_user,only:[:create,:destroy] before_action :current_user, only: :destroy def destroy @micropost.destroy flash[:success] = "Micropost deleted" redirect_to request.referrer || root_url end private def micropost_params params.require(:micropost).permit(:content) end def current_user # この行のcurrent_userが再起呼び出しになっていた # ※本来は、ログイン中のユーザを取得したかった @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to root_url if @micropost.nil? end end
呼び出し元のメソッド名を重複しないよう変更した。
class MicropostsController < ApplicationController before_action :logged_in_user,only:[:create,:destroy] before_action :set_micropost, only: :destroy def destroy @micropost.destroy flash[:success] = "Micropost deleted" redirect_to request.referrer || root_url end private def micropost_params params.require(:micropost).permit(:content) end # メソッド名変更 def set_micropost @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to root_url if @micropost.nil? end end
[参考ページ] teratail.com
自作アプリ(TaskBorderTaskBorder)で、HTML上のtableをCSV出力したかったので、色々調べたことをメモ
tableタグの内容をCSV出力したかった。
jQuery pluginの「table2csv」を使ってみた。
下記な感じで意外と簡単に使えたので、メモメモ
①htmlファイル内でtable2csv.jsの読み込み
<!-- jQueryの読み込み --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <!-- table2csvの読み込み --> <script src="src/table2csv.js"></script>
②tableの準備
<div> <table id="table"> <thead id="head"> <tr><th>title</th></tr> </thead> <tbody id="body"> <td>value</td> </tbody> </table> <button type="button" id="downloadCsvBtn"> CSV download </button> </div>
③buttonのclickイベント内にCSV出力処理を追加
$('#downloadHisCsvBtn').click(function () { // CSV形式に整形 $("#table").table2csv('output', { appendTo: '#out' }); // ファイル名の定義(table.csv) $("#table").table2csv('output', { filename: 'table.csv' }); // CSV出力 $("#table").table2csv(); })
第7章の回答メモです。
リスト7.31のコードを使用して、7.1.4で定義されたgravatar_forヘルパーにオプションのsizeパラメーターを取ることができる (gravatar_for user, size: 40のようなコードをビューで使用できる) ことを確認してください。(9.3.1でこれを改善したヘルパーを使います)
user_helper.rb
module UsersHelper # 引数で与えられたユーザのGravator画像を返す def gravator_for(user,options = {size: 80}) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravator_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravator_url,alt: user.name,class: "gravatar") end end
プロフィール画像のサイズが指定したとおり、「80px,80px」となる。
リスト7.18で実装したエラーメッセージに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト7.32にテンプレートを用意しておいたので、参考にしてください。
users_signup_test
test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path,user:{ name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" } end assert_template 'users/new' assert_select 'div#error_explanation' # 生成されるHTML要素に左記が含まれるかtest assert_select 'div.field_with_errors' # 生成されるHTML要素に左記が含まれるかtest end
7.4.2で実装したflashに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。 リスト7.33に最小限のテンプレートを用意しておいたので、参考にしてください (ヒント: FILL_INメソッドを適切なコードに置き換えると完成します)。(テキストに対するテストは壊れやすいです。文量の少ないflashのキーであっても、それは同じです。個人的には、flashが空でないかをテストするだけの場合が多いです)
user_signup_test.rb
test "valid signup information" do get signup_path assert_difference 'User.count',1 do post_via_redirect users_path,user:{ name: "Example User", email: "user@example.com", password: "password", password_confirmation: "password" } end assert_template 'users/show' assert_not flash.empty? # 追加 end end
7.4.2で触れたように、flash用のHTML (リスト7.25) は読みにくいです。より読みやすくしたリスト7.34のコードに対してテストスイートを実行し、こちらも正常に動作することを確認してください。このコードでは、Railsのcontent_tagヘルパーを使用しています。
application.html.erb
<% flash.each do |message_type,message| %> <%= content_tag(:div, message, class: "alert alert-#{message_type}") %> <% end %>
ここまで
第6章の回答メモです。
リスト6.31の、メールアドレスを小文字に変換するコードに対するテストを、リスト6.41に示されているように作成してください。このテストでは、reloadメソッドを使用してデータベースから値を再度読み込み、assert_equalメソッドを使用して同値であるかどうかをテストしてください。リスト6.41のテストが正しいかどうか検証するために、before_saveの行をコメントアウトするとテストが失敗し、元に戻すと成功することを確認してください。
user_test.rb
test "email addresses should be saved as lower-case" do mixed_case_email = "Foo@exAMPle.CoM" @user.email = mixed_case_email @user.save assert_equal mixed_case_email.downcase,@user.reload.email end
user.rb
before_save { self.email = email.downcase } # $ bundle exec rake test の結果: true # before_save { self.email = email.downcase } # $ bundle exec rake test の結果: false
before_saveコールバック内でemail.downcase!と書き、email属性を直接変更してもよいことを、テストスイートを走らせて確認してください (リスト6.42のように書いてもよいことを、テストスイートを実行して確認してください。
user.rb
before_save { email.downcase! } # $ bundle exec rake test の結果: true
before_saveコールバック内でemail.downcase!と書き、email属性を直接変更してもよいことを、テストスイートを走らせて確認してください (リスト6.42のように書いてもよいことを、テストスイートを実行して確認してください。
user_test.rb
test "email validation should accept invalid addresses" do invalid_addresses = %w[ user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar..com #"."が2回以上出現するケース ] invalid_addresses.each do |invalid_address| @user.email = invalid_address assert_not @user.valid?,"#{invalid_address.inspect}should be valid" end end
user.rb
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i # $ bundle exec rake test の結果: true # VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i# $ bundle exec rake test の結果: false
ここまで
Ruby on Rails チュートリアルの演習回答メモです。
リスト1.8のhelloアクションを書き換え、「Hello, world!」の代わりに「hola, mundo!」と表示されるようにしてみましょう。課外作業: Railsの表示では「非ASCII文字」もサポートされています。スペイン語特有の逆さ感嘆符「¡」を含む「¡Hola, mundo!」を表示してみましょう (図1.19)20
application_controller.rb
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception def hello render text:"hola, mundo!" end end
リスト1.8のhelloアクションを複製して、第2のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト1.10のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更します (図1.20)。
application_controller.rb
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception def hello render text:"hola, mundo!" end def goodbye render text:"goodbye, world!!" end end
routes.rb
Rails.application.routes.draw do root 'application#goodbye' end
とりあえず、一章はここまで
自分で作っている時に少しハマったので、φ(..)メモメモ
<input type="date" id="limit">
HTML5で新しく追加された日付を入力するためのフォーム部品は、
時刻の形式を"yyyy-mm-dd"で設定しなければいけません。
しかし、下記のように何も考えずに月日を取得し、設定すると形式が合わずErrorとなってしまいます。。。
var month = date.getMonth() + 1 // 返り値は、1 ~ 12 var day = date.getDate() // 返り値は、1 ~ 31
※返り値が一桁となる場合、mmまたはddの形式とならない。
日付を取得した後に指定桁数にゼロ埋めしてあげる。
以下のサンプルでは、toTargetDigitsで対象(num)と何桁まで0埋めするか(digits)を指定し、
指定桁数まで文頭に'0'を追加しています。
var date = new Date() var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var toTargetDigits = function (num, digits) { num += '' while (num.length < digits) { num = '0' + num } return num } var yyyy = toTargetDigits(year, 4) var mm = toTargetDigits(month, 2) var dd = toTargetDigits(day, 2) console.log(yyyy+'-'+mm+'-'+dd)