かみなり
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の記述
継承する役割とセーブの役割かな?
def create
super
target = @user.targets.build(target_params)
target.save!
end
userの値をセーブしてから
userとtargets.をアソシエーション後
targetをセーブ
このコマンドでtargetのみのルーティングを見ることができる。
resources :targets doの時
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)が使える
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)>