タイトルの通りですが、CocoaPodsで pod setupしたあとにpod installしようとすると

$ pod install Analyzing dependencies [!] An error occurred while performing `git pull` on repo `master`. [!] /usr/bin/git pull –ff-only fatal: You cannot combine –no-ff with –ff-only.

というエラーが発生する。 エラーメッセージからも分かる通り、–no-ff–ff-onlyは共存出来ないため、–no-ffをtrueにしてあげると解決する

$ git config --global merge.ff true

これで解決。globalで管理するのがダメなのかなぁ。

iOS開発におけるパターンによるオートマティズム
木下 誠
ビー・エヌ・エヌ新社
売り上げランキング: 20,619
Read more

最近はRubyOnRailsをごりごりいじって色々やってます。 その中でrails_admin gemを導入する機会があったのですが、結構つまづいてしまったので記録として残しておこうと思います。

Rails – 4.1.0 Ruby – 2.1.0 rails_admin – 0.6.2 devise – 3.2.4

まずはGemfileに以下を追記します。

gem 'rails_admin'
gem 'devise'

rails_adminでは管理者ログインとしてDevise gemを使うことが出来ます。 その他にもSorceryやManuallyというgemも使えるようですが、自分はDevise gemしか使ったことないのでDeviseにします。

そしてインストールしてdeviseをインストールします。

$ bundle install
$ bundle exec rails g devise:install

色々出てきますが、フラッシュメッセージの部分だけ修正します。

app/views/layouts/application.html.erb



  Cafe
   true %>
   true %>
  


追記した部分を色でつけておきました。

次はmodelを作ります。admin_user というmodelでも作りますか

$ rails g devise admin_user

管理者は直接DBにデータを入れたいため、:registerableと:recoverableを消しておきます。

app/models/admin_user.rb

class AdminUser 

generateしたときに生成されたマイグレーションファイルの中からもregisterableとrecoverableは外しておきます。

db/migrate/****_devise_create_admin_users.rb

class DeviseCreateAdminUsers 

ここまで出来たらマイグレーションしておきましょう。

$ bundle exec rake db:migrate

次はようやくrails_adminをがちゃがちゃします。インストールしましょう。そのときにどのパスで入れるようにするか聞かれるので今回は /admin_user でやってみたいと思います。

$ rails g rails_admin:install
           ?  Where do you want to mount rails_admin? Press 
 for [admin] > admin_user

でここからdeviseと連携させます。色々な記事では自動的に連携されてるっぽいのですが、僕の場合はそうはいかなかったので手動でやります。

config/initializers/rails_admin.rb

RailsAdmin.config do |config|

  ### Popular gems integration

  ## == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :admin_user
  end
  config.current_user_method(&:current_admin_user)

  ## == Cancan ==
  # config.authorize_with :cancan

  ## == PaperTrail ==
  # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0

  ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end
end

ここで大切なのは今回、admin_userとして使用するため、シンボルを :admin_user に変更、9行目の部分も current_admin_user に変更しました。まだこういうとこ慣れてないって感じます・・・

んで次はrouteをちょっといじります。デフォルトの状態ではコンフリクトしてしまうので順番を上下逆にします。 4行目と5行目を逆にして devise_for が上にくるようにしましょう。

Rails.application.routes.draw do
  root 'home#index'

  devise_for :admin_user
  mount RailsAdmin::Engine => '/admin_user', as: 'rails_admin'

少し長かったですが、これで終わりです!あとはコンソールでユーザー作って実際にログインしてみましょう!

これで localhost:3000/admin_user にアクセス出来るのでアクセスしましょう!うまくいってればログイン画面に飛ばされ、ログインすると綺麗な画面が出てくるはずです!!

色々高機能らしいrails_admin、これから色々触ってみます!!

頑張って読んでます。面白い!

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 26,917
Read more

予想以上にドはまりしてもう一生やりたくないよ!ってくらいやりたくないのでここでまとめておきますw

相当ごりごりっと解決してしまったのでもっとスマートにやりたかったんですが、色々検索して出てきたものがことごとくうまくいかなかったのでしょうがないです・・・

流れとしては、

  • $wp_queryを一時保存して、新たにWP_Queryクラスのインスタンスを$wp_queryに上書きする形で作る
  • GETの値を調べる(ページが今何ページか調べる)
  • ページネーションの関数で出力する
  • $wp_queryを元に戻す

なぜ$wp_queryを上書きするかというと、デフォルトで多くの関数が$wp_queryを使用して関数の出力を行っているためです(まぁglobalなんでね)

実行環境としては

  • PHP 5.4.24
  • WordPress 3.6.1

それでは以下コードになります。

functions.php

function bmPageNavi() {
  global $wp_rewrite;
  global $wp_query;
  global $paged;

  $paginate_base = get_pagenum_link(1);
  if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
    $paginate_format = '';
    $paginate_base = add_query_arg('page', '%#%');
  } else {
    $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
    untrailingslashit('?page=%#%', 'paged');;
    $paginate_base .= '%_%';  
  }

  $result = paginate_links( array(
    'base' => $paginate_base,
    'format' => $paginate_format,
    'total' => $wp_query->max_num_pages,
    'mid_size' => 5,
    'current' => ($paged ? $paged : 1),
  ));

  return $result;
}

 

archive.php

 2,
    'paged' => $paged,
    'post_type'      => your_post_type,
    'orderby'        => 'post_date',
    'order'          => 'DESC'
);
$wp_query->query($param); 

get_header(); ?>
    have_posts() ) : ?>
        have_posts() ) : $wp_query->the_post(); ?>
  
    

 

これで自分の場合ちゃんと動きました!

最後に

WordPressでもよくあるだろうページネーションでこんなに大変な思いをするとは思ってませんでした。 でももともとページネーションは複雑ですししょうがないですよね。最終的にどうにかなってよかったです。

WordPressレッスンブック HTML5&CSS準拠
エビスコム ソシム 売り上げランキング: 10,185
Read more

タイトルとおりのことです。

うまくjoin出来てるはずなのにな〜〜なんでだろうなぁ、sql_dumpでちゃんと思い通りのSQL発行されてるのにな〜なんだろうなぁ・・・と思い、色々optionを指定していたらタイトルとおりのことが出来ていなかったせいで結果が反映されていませんでした。

下記のようなコードを書いた場合はちゃんとfieldsも指定しましょう

$this->User->find('all', [
    'joins' => [
        'comment' => [
            'table' => 'comment',
            'alias' => 'Comment',
            'type' => 'inner',
            'conditions' => [
                'User.id = Comment.user_id'
            ]
        ]
    ],
    'fields' => '*'
]);

これで解決。めでたしめでたし!

参考:http://stackoverflow.com/questions/4354846/cakephp-display-custom-fields-from-array/4355357#4355357

cakePHP2.0のfindでINNER JOINしてもJOINしたテーブルが表示されない

詳解CakePHP辞典―2.0/2.1/2.2/2.3対応
滝下 真玄
秀和システム
売り上げランキング: 91,713
Read more

こんにちは!

Rubyで色々遊んでるんですが、本当に大したことじゃないところで?ってなることが多いです。 まぁ最初はそんなもんだと思うのですが、ちょっとずつメモしていこうかと。

よくあるのが、変数内の文字列が空じゃなかったら、みたいな条件分岐。 これPHP脳だと!empty($name)みたいにしちゃうのですが、なんか違うなぁと。

なので軽く調べてみるとRubyにはunlessというifの逆があると。

じゃぁこれ使って以下のように条件分岐すればいいじゃん、みたいな。

name = "tagami"
friend = "toshiya"
# 2つの変数が両方空じゃなかったら
unless name.empty? && friend.empty?
  # 色々記述
else
  # 1つでも空があった場合の記述
end

とても当たり前のことなのでブログに書くことすらためらったのですが、一応メモ変わりに。

※2月21日15:04編集 untilじゃなくてunless。泣ける

初めてのRuby
初めてのRuby
posted with amazlet at 14.02.07
Yugui
オライリージャパン
売り上げランキング: 103,573
Read more

こんにちは!

最近隣のエンジニアやいつかどこかの記事でSlimやばい的なことを聞いた気がするのでじゃぁやるか!って完全にノリで今回Slimに入門してみます。

そもそもSlimとは??

Ruby製のテンプレートエンジン。 軽くて速く、また習得するのも容易。

Slimをやるときにとりあえず覚えておくといいのは

  • 拡張子は.slim
  • インデントの深さで入れ子構造を表現する
  • 通常のHTMLから, >, />を取り除くと基本OK

それでは実際のコードを見てみましょう。

とその前にSlimをインストールしましょう。

gem install slim

今回検証に使った環境は以下です。

  • Ruby・・・2.1.0
  • Gem・・・2.2.0
  • Slim・・・2.0.2

以下がSlimのサンプルコードです

doctype html
html
  head
    title Slim Example
    meta name="keywords" content="slim example"

  body
    h1 Slim Example

    #content
      p Test Case

    - until users.empty?
      table#users
        - for user in users
          tr
            td.name = user.name
            td.age = user.age
    - else
      p Not found.

これが変換されると以下のようになります。





Slim Example
  



Slim Example

Test Case

Tagami 23

それでは1つずつ理解していきましょう。

基本的には, >, />をなくした形

head内にあるmetaとかを見ればわかると思いますが、基本は<, >, />をなくした形です。

あとCSSの記述方法(idの指定とかclassの指定とか)も使うことが出来るのがこの例でわかると思います。 ちょっと覚えなければならないのがRubyのsyntaxを使用したいときです。

Rubyのsyntaxを使いたい場合は -(ハイフン) を使用する

例の中に条件分岐やループ文があったと思うのですが、Rubyのsyntaxを使いたい場合は-(ハイフン)を使ったあと半角スペースを1つあけてRubyを書いていけば動きます。

- until users.empty?
      table#users
        - for user in users
          tr
            td.name = user.name
            td.age = user.age
    - else
      p Not found.

関数や変数を呼び出したいときは =(イコール) を使用する

上のコードのループ文内で=(イコール)を使っている部分は変数内の値を呼び出しています。

ここまでわかればとりあえず実践で使えるはず!書かなくていいのでめっちゃ楽!!

最後に

たったこれだけ覚えるだけでも相当便利なのですが、Slimにはもっと便利な機能が詰まっているので、もし興味がある方は公式ドキュメントを見ていただけると幸せになれると思います!

関係ないけどここでSASS本を

Web制作者のためのSassの教科書 これからのWebデザインの現場で必須のCSSメタ言語
平澤 隆 森田 壮
インプレスジャパン
売り上げランキング: 48,416
Read more

こんにちは!

最近ちょこちょこRubyで遊びながら、Rubyという言語に慣れていってる途中です。

今回はRailsでお馴染みのActiveRecordをRails内じゃなくてRuby単体のプログラム内で使ってみようと思います。 やっぱりCakePHPに慣れているので単体のプログラムでもActiveRecordが使えるととても助かると思います。

それではやっていきましょう。

といっても毎度Rubyは簡単に終わらせてくれるので簡単に終わります。

ちなみに環境は

  • Ruby・・・2.1.0
  • Gem・・・2.2.0
  • MySQL・・・5.6.15

gemのインストールをしましょう。

データベースの設定ファイルをYAMLに落としておきます。

database.yml

db:
  product:
    adapter: mysql2
    host: localhost
    username: root
    password: password
    database: test

あとはこのYAMLファイルを読みこめば終了です。

require 'rubygems'
require 'active_record'

conf = YAML.load_file('./database.yml')

ActiveRecord::Base.establish_connection(conf["db"]["product"])

# テーブルにアクセスするクラスを作成
class User < ActiveRecord::Base
end

# 全レコード取得
User.all

こんな感じでもう終了。 さすがRubyさん。ほれますわ

とりあえず文法やるときに

たのしいRuby 第4版
たのしいRuby 第4版
posted with amazlet at 14.02.04
高橋 征義 後藤 裕蔵
ソフトバンククリエイティブ
売り上げランキング: 31,358
Read more

こんにちは!

以前こういう記事を書いたのですが、やっと本題

capybara-webkitを導入することが出来たので実際にスクリーンショットを撮ってみましょう。

といってもさすがRubyさん。こういうときにぱぱっと簡単なコードでできちゃうのはとても魅力的ですね! 今回はGUIを持っていない環境でも動くようにheadlessというgemも入れて動かしました。

ちなみに環境としては

  • Ruby・・・2.1.0
  • Gem・・・2.2.0
require 'rubygems'
require 'capybara-webkit'
require 'headless'

driver = Capybara::Webkit::Driver.new('web_capture').browser
driver.visit "http://google.com".to_s
driver.render("google.com", 1080, 550)

なんとこれだけ!なんて簡単!びびる!死んじゃう!!

ってことでこれでスクリーンショットが撮れました。seleniumみたいにセッション残すにはどうしたらいいのかとか調べてみたのですが、出来ないのかな。 誰か知っている方、教えていただけると助かります!!

そろそろやらねば

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 37,078
Read more

こんにちは!

今回は僕がFacebookのタブページを制作するときに何個か気をつけていることがあるので記事にしておこうと思います。 誰かの役に立つことを信じて。

ちなみにタブページっていうのは昔の記事で言及しているもののことを指しています。

Facebookタブページを制作しているときに気をつけていること

そこまで多くないし普通にページ制作してれば大丈夫なのですが、Facebookタブページ内では以下のことに気をつけながら制作しています。

  • widthは810px
    810pxより大きく作ってしまうと、ページにスクロールバーが出てしまうのでここは気をつけて作っておいたほうがいいです。

  • Facebook JavaScript SDKを読み込む
    Facebookタブページを作る際、Facebook JavaScript SDKが準備されているのでそれを読み込みましょう。 具体的には以下のコードになります。


<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="css/reset.css" type="text/css" />
    <link rel="stylesheet" href="css/style.css" type="text/css" />
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/rollover.js"></script>
    <script type="text/javascript" src="https://connect.facebook.net/ja_JP/all.js"></script>
    <script language="JavaScript">
    FB.init({
            appId: [アプリID], 
            status: true,
            cookie: true,
            xfbml: true
    });

    window.fbAsyncInit = function() {
        FB.Canvas.setAutoGrow();
    }
</script>
<title></title>
</head>
<body>
</body>
<div id="fb-root"></div>
<script>
    FB.Canvas.setAutoGrow({ width: 851, height: 1400 });
</script>
</body>
</html>
Read more

こんにちは!

前から1回Facebookページのタブを作る流れをまとめたいと思っていたのでこの機会にまとめちゃいたいと思います! ちなみにFacebookページのタブとは、下の赤枠の部分のことをさしています。

タブページを作るのに必要なもの

  • SSLの通ったサーバー
  • Facebookページ
  • Webページを作成するための知識

それでは作っていきましょう。

Facebookアプリを作成する

昔書いた記事にFacebookアプリを作る方法があるのでそこまでやってください。

「設定」から「App Domains」の部分に今回使用するサーバーのドメインを登録しておいてください。

「Add Platform」をクリックして「ページタブ」を選択してページタブ情報を入力します。

「Page Tab Name」はページタブの名前を(Facebookページのタブ画像の下に表示される文字列です)、「Page Tab URL」には表示したいページのURLを、「Secure Page Tab URL」には「Page Tab URL」で指定したページにSSLが通っているURLを入力します。 「ページタブの画像」には画像を入れます。現在、111×74ピクセルのものしか入れることが出来ないので注意してください。

全て入力したら「変更を保存」をクリックします。

サンドボックスモードを解除する

デフォルトではそのタブページは管理人しかアクセス出来ないようになっているのでサンドボックスモードを解除して誰でもアクセス出来るようにします。

アイコン画像を設定する

ページタブのアイコンとは以下の部分です。

「App Details」の「アイコン」項目のとこにある「16×16」のほうに画像をアップロードします。 そこにアップロードした画像がアイコン画像になります。

Facebookページにタブを埋め込む

FacebookアプリのIDを以下のURLに置き換えてアクセスします。

http://www.facebook.com/add.php?api_key=[FacebookID]&pages=1

以下のようなページに飛ぶのでページタブを設定したいページを選択してOKボタンをクリックします。 これでタブページ設定完了です!!!

最後に

これで一連の流れは終了です! Webページの制作になるとまた別に多少の知識が必要なのですが、それはまたの機会に!

結構参考になります

Facebookページ プロフェッショナルガイド
蒲生トシヒロ 竹村詠美 原裕 大元隆志 井出一誠 マクラケン直子 ホシナカズキ 藤本壱 荒木勇次郎 関根元和
毎日コミュニケーションズ
売り上げランキング: 232,919
Read more