kyopa’s blog

自分用プログラミングアウトプット

かみなり

gem 'kaminari-bootstrap', '~> 3.0.1'

ジェムファイルに入れて

インストールを実施

コントローラ

def index
  @luck = Luck.all
  @user = User.all
  @lucks = Luck.page(params[:page]).per(10)
end

 

追加

per(10)で10個以上なら次のページに反映するようになる

 

 

びゅー

<table class="table table-striped table-hover">

 

省略

</table>
<%= paginate @lucks %>

 

これで実装できました。

 

 

fields_for

fields_for

Rails で2つ以上の種類のモデルのオブジェクトの情報を、1つのフォームで編集して送信したい場合、fields_for メソッドを使うと実現できる。



<h1 class="sign_main">新規登録</h1>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autocomplete: "name" %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>

<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>

<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
<div class="avatar">
<%= f.label :profile_image %>
<%= f.file_field :avatar, id: :feed_avatar %>
</div>

 

<%= fields_for(@target) do |target| %>
<div class="Target_content">
<%= target.label :目標設定 %>
<%= target.text_field :content %>
</div>
<div class="Target_point">
<%= target.label :ポイント設定 %>
<%= target.select :point, [["30", "30"], ["100", "100"], ["200", "200"], ["300", "300"], ["400", "400"],["500", "500"], ["1000", "1000"]], :prompt => "選択してください" %>
</div>
<div class="target_image">
<%= target.label :画像投稿 %>
<%= target.file_field :image %><br>
</div>
<% end %>

 

 


<div class="actions">
<center><button type="submit" class="btn btn-info">登録完了</button></center>
</div>
<% end %>
<!--<%#= render "devise/shared/links" %>-->

def new
@target = Target.new
super
end

 

 

superの記述

 

class Human
def sleep
puts "寝た"
end
end
 
class Programmer < Human
def sleep
super
puts "しかし何故かぐっすり眠れない"
end
end
 
programmer = Programmer.new
programmer.sleep
 
#実行結果
#寝た
#しかし何故かぐっすり眠れない

 

継承する役割とセーブの役割かな?

 

def create
super
target = @user.targets.build(target_params)
target.save!
end

 

userの値をセーブしてから

userとtargets.をアソシエーション後

targetをセーブ

 

 

 

rails routes grep | target

 

このコマンドでtargetのみのルーティングを見ることができる。

 

 

 

 

resources :targets doの時

rails routes grep | target

 

top_targets GET /targets/top(.:format) targets#top
targets GET /targets(.:format) targets#index
POST /targets(.:format) targets#create
new_target GET /targets/new(.:format) targets#new
edit_target GET /targets/:id/edit(.:format) targets#edit
target GET /targets/:id(.:format) targets#show
PATCH /targets/:id(.:format) targets#update
PUT /targets/:id(.:format) targets#update
DELETE /targets/:id(.:format) targets#destroy

 

resource :targets doの時

 

rails routes | grep target
top_target GET /target/top(.:format) targets#top
new_target GET /target/new(.:format) targets#new
edit_target GET /target/edit(.:format) targets#edit
target GET /target(.:format) targets#show
PATCH /target(.:format) targets#update
PUT /target(.:format) targets#update
DELETE /target(.:format) targets#destroy
POST /target(.:format) targets#create

 

 

単数にするとpathのidを必要としなくなる

値が一つしかない場合は単数にすると可読性がupする

 

 

アソシエーションしているケースだと

has_manyではなくhas_oneとかにする

 

 

rails g devise:controllers users

バイスコントローラーを作成

devise_for :users, controllers: {
registrations: 'users/registrations'
}

ルーターの設定

こうすることでデバイスコントローラ(registrations)が使える




rails パスの指定

htmlに画像を入れるために相対パスを指定

 

パスの指定方法は正しいはずなのに画像が反映されない・・・

 

railsには設定より規約というものがあり

 

railsで画像のパスを指定する時は

<img src="../../../assets/moon.jpg" alt="月">

 

こんな感じにすると反映された

 

普通だとassets/images/moon.jpgとなるが

imagesはrailsの場合だといらないみたい!!

 

 

gem "chartkick"を入れたらエラーがでた

gem chartkickをgemファイルに入れて

 

bundle install

 

その後layouts/application.html.erbのheadタグの中に入れる

<%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %>

 

 

アプリを起動したら

 

ActionView::Template::Error (Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( chartkick.js )` to `config/initializers/assets.rb` and restart your server):

こんなエラーがでた

 

翻訳すると

config/initializers/assets.rbに

この文章Rails.application.config.assets.precompile += %w( chartkick.js )を入れてと言われた。

その後再起動してください

 

言われた通りやったらエラーがでなくなりました。

 

configをいじった後は再起動はよく忘れる!!

 

 

 

 

 

メモ

[1] pry(main)> User.all
User Load (0.8ms) SELECT "users".* FROM "users"
=> [#<User id: 1, email: "a@gmail.com", created_at: "2018-10-09 08:18:50", updated_at: "2018-10-09 08:18:50", avatar: "IMG_2684.JPG", name: "A">,
#<User id: 2, email: "b@gmail.com", created_at: "2018-10-09 08:22:31", updated_at: "2018-10-09 08:22:31", avatar: "IMG_0654.JPG", name: "B">]
[2] pry(main)> U
NameError: uninitialized constant U
from (pry):2:in `__pry__'
[3] pry(main)> @user = User.first
User Load (0.8ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 "LIMIT", 1
=> #<User id: 1, email: "a@gmail.com", created_at: "2018-10-09 08:18:50", updated_at: "2018-10-09 08:18:50", avatar: "IMG_2684.JPG", name: "A">
[4] pry(main)> @user.following
User Load (1.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = $1 "follower_id", 1
=> [#<User id: 2, email: "b@gmail.com", created_at: "2018-10-09 08:22:31", updated_at: "2018-10-09 08:22:31", avatar: "IMG_0654.JPG", name: "B">]
[5] pry(main)>