く? [ku]

ぐぐるだけでPHPどこまでできるか…!

Railsのフォームでajaxでメソッドを叩いて値を更新する

なんて書けば良いのかわかんないけど、

Railsでつくったフォームの入力値をとってきて、

(フォームは送信せず)

なんかメソッドたたいて、返って来た値をつかって

フォームを更新する、みたいなことがやりたかった。

すごい簡単にいうと、インターネット上で住所入力するとき、

郵便番号いれて、住所がぱぱっと入力されるみたいなやつが

やりたかった。

メソッドも自分でつくります。

 

フォームの値をとってくる

これはJSでできる!

Railsは適当にJS読み込んでくれるので、

そこに書く。

[JavaScript] テキストボックスの値を取得する

 ここを参考にした。

<%= f.text_field :url%>

というフォームがもともとあって、

<%= f.text_field :url , :id => 'url' %>

 こんな感じで書くとよい。

idを指定するだけではうまくいかなかったので、

getElementByIdをつかった。

alertまたはconsole.logで確認しておく。

 

メソッドの準備 

メソッドのルーティングをしておく。

getメソッドにする。

クエリで受け取るので、その変数をurlとすると、

params[:url]でメソッド側から受け取れる。

処理を書いて、最終的にテキストで今回は出すので、

render text:"テキスト"

と書いておく。

メソッドがちゃんと動作するか、

直接叩いて確認しておく。

~/メソッドのroute?url=hogehoge

のようにブラウザに入れて、"テキスト"がページに出ればOKです。

このときparams[:url]はhogehogeになります。

【参考にしたページ】

Railsでレスポンスを返すメソッドについての簡単勉強メモ - light log 

実はここが一番つまったところ。

 

Ajax処理を書く

フォームはそのまま送信せず残しているので、

Ajaxメソッドを叩きます。上でかいているJSの続きに書けばOKです。

$.ajax({
url: "/メソッドのroute",
type: "GET",
data: 'url=' + url_string,
success: function(data) {
成功したときの処理
},
error: function() {
失敗したときの処理
}

 

という感じにかきます。これは上のメソッドで受け取る形にあわせているので、

dataのところは自分の好きなようにしてください。

url_stringは最初のJSで取得したデータを入れている変数です。

ajaxでtypeをGETにすると、クエリでうまく渡せるようです。

上でrenderにしたテキストをsuccessのdataで受け取れます。

 

【参考にしたページ】

ダメ男のブログ: Ruby on Rails3でlink_toでAjax処理

パラメータの取得 - Ruby on Rails入門

 

最後にJSで値を入れる

successのdataにメソッドからrenderで指定した値がはいっているので、

最後にまたgetElementByIdで値をいれます。

 

ちょっと時間がかかるので、ぐるぐるなんかだせるといいですねー

Ruby on Rails ~もくもくAjax~

初めてKyoto.rbに参加しました。

もくもく会

 

前回のdeviseの導入のつづき、


Railsのログイン認証gemのDeviseのカスタマイズ方法 - Rails Webook

をやった。

日本語ローカライズのリンク切れだったので、

第15回: Devise によるユーザー認証機能の日本語化(1) - Ruby on Rails 3.0 日記 - Ruby on Rails with OIAX

ここからもらった。

 

あとURLからページのタイトルを取得したくて、


Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル] - 酒と泪とRubyとRailsと

nokogiriなるものを導入。

これをajaxつかってページに表示させたい、というところでタイムオーバー。

1.5h一瞬だった。

Ruby on Rails ~devise奮闘編~

Ruby on Railsはじめました

細かいことはさておき。

 

ログイン認証"devise"をいれる!


Railsの一番人気のログイン認証gemのDeviseの導入方法 - Rails Webook

これやってます。

まずひっかっかったの。"bundle install"すると、

Could not find gem 'device (>= 0) ruby' in the gems available on this machine.

これは、gemfileに"device"とかいていたせいでした…

 

つぎ。

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

 

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb

creating Makefile

 

make "DESTDIR="

xcrun: error: active developer path ("/Applications/Xcode 2.app/Contents/Developer") does not exist, use xcode-select to change

 

 

Gem files will remain installed in /var/folders/7c/mxb436gn589f9d6dz7bfq7z80000gn/T/bundler20150301-11365-1boopry/bcrypt-3.1.10/gems/bcrypt-3.1.10 for inspection.

Results logged to /var/folders/7c/mxb436gn589f9d6dz7bfq7z80000gn/T/bundler20150301-11365-1boopry/bcrypt-3.1.10/gems/bcrypt-3.1.10/ext/mri/gem_make.out

これに関しては、

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

 することで解決。

 

さらに、"rake db:migrate"で失敗。

エラーメッセージは

rake aborted!

NoMethodError: undefined method `devise' for User

 こんなかんじ。

これは、

rails generate devise:install

 することで解決した。

db:migrateすると、railsの再起動が必要らしいので、

再起動してやると、先のページのようなログイン機能が実装されました!

PHPアプリをHerokuにデプロイできた!

 

PHPアプリをHerokuにデプロイ - く? [ku]

 の続き。

何が問題だったかというと、logをみたら解決した。

logの見方は

heroku logs

でOK,

Call to undefined function mb_detect_encoding() in hoge.php on line 93

ってかいてあったので、"mb_detect_encoding() heroku"を調べると、


Heroku: PHP Fatal error for valid function - mb_check_encoding - Stack Overflow

"mbstring"をいれるべし、ということなので、

"mbstring heroku"で検索。


herokuでPHP環境の構築 - KayaMemo

こちらを参考にさせてもらって、

{

    "require": {

        "ext-mbstring": "*"

    }

}

をcomposer.jsonに書いた。

 

次に、またlogがエラーはいていた。

Call to undefined function imagecreatetruecolor() in hoge.php on line 16

だそうで、"imagecreatetruecolor()"はGDだな、ということがピンときて、

composer.json

{
"require": {
"ext-mbstring": "*",
"ext-gd": "*"
}
}

こんな感じで追記。

やっとうまくいきましたー!!!

 


iConpeito - iPhone/iPad icon maker

こちらが、今回アップしたものです!!!

 やった〜〜〜

PHPアプリをHerokuにデプロイ

MAMPではうまくいってるが、Heroku上でうまくいかない…

もとのファイルは拡張子PHPで、中身はhtmlのなかにPHPを埋め込んでいる状態。

 

ページを表示すると途中までしかでない。

<?php

がはじまっているすぐ前から消えている… 

 

自作関数とその呼び出し

自作関数の書き方

 

function func_name($arg){

//ここに処理を書く

return $hoge;

 で、

$poyo = func_name($puni)

とかやると、func_nameの$argに$puniが代入されて、

返って来た値$hogeが$poyoに代入される。はず。 

 

PHPの正規表現でHTMLからタイトルを抽出

$subject = file_get_contents(URL);

 if (preg_match_all("/<title>(.*?)<\/title>/s", $subject, $match) ){

echo $match[1][0]."<br>";

}else{

echo "no match.<br>"; } 

 

 

って感じでタイトルだけ表示できました!

$matchという配列が意味不明で、

$match[0]はさらに空のArrayが入っていて、

$match[1]もArrayがはいっていて、そのArray[0]に結果がいました。

このへんは要勉強。

 

参考サイト

[Q&A] 正規表現で特定のHTMLタグのクラスから文字列を取り出したい 【OKWave】 : http://okwave.jp/qa/q5069941.html