スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

accepts_nested_attributes_for と fields_for で生成したフォームに値を設定する方法のメモ

accepts_nested_attributes_for と fields_for で生成したフォームに値を設定する方法のメモ。

User Model
class User < ActiveRecord::Base
has_many :posts
accepts_nested_attributes_for :posts
end

Post Model
class Post < ActiveRecord::Base
belongs_to :users
end

とModelを定義した場合。

Controller
def entry
@users = User.new

posts_attributes = []
2.time |n| do
# 未入力を作る場合はこっち
# @event_users.event_user_joins.build

# 初期値
posts_attributes_attributes.push({title: "タイトル#{n}"})
end

@users.posts_attributes = posts_attributes
end


View
= form_for(@users) do |f|
dl
= f.fields_for :posts do |pf|
dt
= pf.object.title # タイトルを表示
dd
= pf.text_field :title # 入力フォーム


参考サイト
ネストされたモデル(親子関係を持つモデル)で、子を表示、編集するには
複数の子レコードを作成・更新する. accepts_nested_attributes_for
スポンサーサイト

vagrantのsynced_folderの設定をnfsにした時にtimeoutしてしまう

vagrantのsynced_folderの設定をnfsにした時にtimeoutしてしまっていた。
これの解決が出来たのでメモ。

vagrant upした時のメッセージは下記のような感じ。
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: mount -o 'rw,vers=3,tcp,fsc,actimeo=2' 192.168.33.1:'/Path/Sync' /vagrant (sudo=true)
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: Sending SSH keep-alive...
DEBUG ssh: stderr: mount.nfs: Connection timed out

DEBUG ssh: Exit status: 32
INFO retryable: Retryable exception raised: #Vagrant assumes that this means the command failed!

mount -o 'rw,vers=3,tcp,fsc,actimeo=2' 192.168.33.1:'/Path/Sync' /vagrant

Stdout from the command:



Stderr from the command:

mount.nfs: Connection timed out


色々と試してみたけど、結論から言うとファイアーウォールの設定で弾かれていた。

macのファイアーウォールと、ウィルスソフトのファイアーウォールを切ってみたところ、正常にマウントが出来るようになった。
切ったままだと、よろしくないので、ファイアーウォールの設定は192.168.33.0/24などを許可しておく感じで。
※ 許可するのは、Vagrantfileで設定している
config.vm.network "private_network", ip: "192.168.33.10"
のIPに従って変更する。

参考サイト
Running `vagrant up` hangs on NFS mounting (Vagrant 1.4.3)
Vagrant で nfs を使った synced_folder が機能しない
Vagrant共有ディレクトリをnfsモードで起動する

swiftで「#if DEBUG」で分岐させる方法をメモ

いつも忘れるので、swiftで「#if DEBUG」で分岐させる方法をメモ。
Xcode の Build Settings の
Swift Compiler - Custom Flags
 Other Swift Flags
のDebug のところに
-D DEBUG
を追加すればOK

参考サイト
Swift での #ifdef DEBUG のやり方

pod setupしたら「Setting up CocoaPods master repo」で止まった時の解決方法のメモ

pod setupしたら「Setting up CocoaPods master repo」で止まった時の解決方法のメモ。
pod setup --verbose
で、どこで止まっているのかを確認する。
今回は、git cloneで止まっていたので、そこを自分でcloneしてくる。
$ cd ~/.cocoapods/repos
$ git clone https://github.com/CocoaPods/Specs.git master
してから、
pod setup --verbose
してみると、うまくいった。

$ pod repo remove master
$ pod setup
$ pod install
でもうまくいくのかも。

参考サイト
pod setupしたら「Setting up CocoaPods master repo」から進まない問題

sshで「Too many authentication failures for xxx」が出た時の対処方法

sshで「Too many authentication failures for xxx」が出た時の対処方法をメモ。
~/.ssh/config に、色々追加したりなど、ネットの記事がたくさんあったけど、解決出来なかった・・・。

試したのは、下記のサイトなど。
sshで接続時の「Too many authentication failures for username」エラーの対処法
ssh接続でToo many authentication failuresが出る

でも、なぜかうまくいかなかったので、
ssh-add -D
で登録されている鍵を全て削除する事で、解消出来た。

参考サイト
sshで「Too many authentication failures for ...」が出た場合の対処法

bundleやgemがsudoでパスが見つからない事象の解決方法

CentOS6だと、sudoでbundleやgemがパスが見つからないのエラーになる。
visudoの
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
にパスを追加すればOKらしい。
ただ、それだけだとwhichがなぜか向いてくれなかったので、secure_path はコメントアウトして、
Defaults env_keep += "PATH"
を追加する。
シェルスクリプトにしたので、rootのユーザーで実行すればOK。
※ visudoじゃなく、sudoersを直接書き換えているので、念のためバックアップはとっておくこと。
#!/bin/bash
# Script for placing sudoers.d files with syntax-checking

# add bundler path into visudo
bundle_path=`su - vagrant -c 'which bundle'`
gem_path=`su - vagrant -c 'which gem'`
# Making a temporary file to contain the sudoers-changes to be pre-checked
tmp="/tmp/vagrant_sudors"
tmp2="/tmp/vagrant_sudors2"
touch $tmp
touch $tmp2
cat /etc/sudoers > $tmp

# 書き換え
if cat $tmp | grep $bundle_path > /dev/null; then
echo 'already replaced.'
else
echo 'replaced sudoers.'
cat $tmp | sed -e "s%Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin%Defaults env_keep += \"PATH\"%" > $tmp2

# Check if the changes we want are OK
visudo -c -f $tmp2
if [ $? -eq 0 ]; then
echo 'Adding bundler path to sudoers.'
# cat $tmp2
cat $tmp2 > /etc/sudoers
else
echo "sudoers syntax wasn't valid. Aborting!"
fi
fi

# 念のため残しとく
# rm -rf $tmp
# rm -rf $tmp2


参考サイト
sudo時にPATHを引き継ぐ方法
sudo実行時に$PATHが通っていない場合の設定
sudo 経由で rbenv を使えるようにする
Linuxシェルでファイルの中身の一部を書き換えるsed
何度も要求されるパスワード入力を省略する
sed コマンドで切り出す

vagrantの共有フォルダのマウントが出来なくなったので修正方法のメモ

vagrantの共有フォルダのマウントが出来なくなったので修正方法のメモ。
ゲスト側のOSは、CentOS6.7
なんでこうなったかの原因は不明のまま。。
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

下記の手順でゲスト側のOSでsymlinkを設定しなおしてみたところ、動くようになった。
$ vagrant ssh
Last login: Sat Aug 6 06:27:41 2016 from 10.0.2.2
[vagrant@localhost ~]$ ls -l /sbin/mount.vboxsf
lrwxrwxrwx 1 root root 42 8月 6 06:28 2016 /sbin/mount.vboxsf -> /usr/lib64/VBoxGuestAdditions/mount.vboxsf
[vagrant@localhost ~]$ ls -l /usr/lib/VBoxGuestAdditions/mount.vboxsf
-rwxr-xr-x 1 root root 15544 7月 10 12:11 2015 /usr/lib/VBoxGuestAdditions/mount.vboxsf
[vagrant@localhost ~]$ sudo rm /sbin/mount.vboxsf
[vagrant@localhost ~]$ sudo ln -s /usr/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf
[vagrant@localhost ~]$ exit
これで、vagrant reloadをしてなおった。

マウント出来なくなる原因は色々とあるらしい。

参考サイト
VirtualBoxの/vagrantがマウントに失敗

swift, CocoaPodsでAFNetworkingを入れた時に躓いたのでメモ

swift, CocoaPodsでAFNetworkingを入れた時に躓いたのでメモ。
pod initで作ったPodfileに
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

target 'SimpleChat' do
# Comment this line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

# Pods for SimpleChat
pod "AFNetworking"

target 'SimpleChatTests' do
inherit! :search_paths
# Pods for testing
end

target 'SimpleChatUITests' do
inherit! :search_paths
# Pods for testing
end

end
こんな感じで記述して、pod installした。
インストールは成功して、Pods/AFNetworking には、インストールされているのに、ビルドをするとimport AFNetworkingしている箇所で下記のエラーが発生した。
No such module 'AFNetworking'


原因は
xcodeproj
ファイルでxcodeを開いていたため。

cocoapodsを使った場合は
xcworkspace
ファイルから開く必要がある。

参考サイト
Podsでライブラリをインストールすれどもimportできず
AFNetworking を使って GET するまで
Swift AFNetworkingライブラリを使ってみよう!

プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。