参考にしたコード
class ToppagesController < ApplicationController def index if logged_in? @micropost = current_user.microposts.build # form_with 用 @microposts = current_user.microposts.order(id: :desc).page(params[:page]) end end end
@micropost = current_user.microposts.build # form_with 用
ここについて質問です。
まずこの方法は
belongs_to :user の関連付けによって、Micropost のインスタンスでインスタンスメソッド user が使えるようになります。
使用例:micropost.user
このuserメソッドで、ある投稿に紐付いた User のインスタンスを取得することができます。
同様に、 User に設定した has_many :microposts の関連付けによって、User のインスタンスでインスタンスメソッド microposts が使えるようになります。
とあるように多数 対 多数 の関係のための手順をしないと使えません。
そもそも僕のアプリ作っているアプリは誰の投稿かを特定しないのでこれは使用しないつもりです。
しかしこの形はnew.html.erbを使わなくて良いので(僕はindexで入力してindexに表示させようと思っています。)この形を使っていました。
まとめるとnew.html.erbを使わない形でindexからindexに埋め込むやり方を教えてください。
回答待ってます。
作りたいフォームは、「新規登録用」のものということで間違いないですか?
いや、新規投稿用です。
今は自分の行動記録とタスクを投稿して保存させようとしています。
新規投稿用です。
行動記録とタスクを入力して保存する機能をつけようとしています。
・現状ではどのような問題がありますか?
・indexのビューの方はどのように書いていますか?
エラー内容
NoMethodError in TimesController#index
undefined method `logged_in?' for #<TimesController:0x00007f5994261f98> Did you mean? logger
Extracted source (around line #8):
6
7
8
9
10
11
def require_user_logged_in
unless logged_in?
redirect_to login_url
end
end
Rails.root: /home/ec2-user/environment/lifemanagements
Application Trace | Framework Trace | Full Trace
app/controllers/application_controller.rb:8:in `require_user_logged_in'
Request
Parameters:
None
Toggle session dump
Toggle env dump
Response
Headers:
None
これはtimeのエラーです。taskも同じエラーが出ています。
indexのview
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-left-circle" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
<path fill-rule="evenodd" d="M8.354 11.354a.5.5 0 0 0 0-.708L5.707 8l2.647-2.646a.5.5 0 1 0-.708-.708l-3 3a.5.5 0 0 0 0 .708l3 3a.5.5 0 0 0 .708 0z"/>
<path fill-rule="evenodd" d="M11.5 8a.5.5 0 0 0-.5-.5H6a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5z"/>
</svg>
<div class="row">
<aside class="col-sm-6">
<%= form_with(model: @time, local: true) do |f| %>
<div class="form-group">
<%= f.text_area :content, class: "form-control", rows: 2 %>
</div>
<%= f.submit "達成", class: "btn btn-primary btn-block" %>
<%= f.submit "達成ストップ", class: "btn btn-primary btn-block" %>
<% end %>
<h3>達成時間</h3>
<ul>
<% @times.each do |time| %>
<li><%= time.content %></li>
<% end %>
</ul>
</aside>
<div class="col-sm-6">
<%= form_with(model: @timehelper, local: true) do |f| %>
<div class="form-group">
<%= f.text_area :content, class: "form-control", rows: 2 %>
</div>
<%= f.submit "娯楽", class: "btn btn-primary btn-block" %>
<%= f.submit "娯楽ストップ", class: "btn btn-primary btn-block" %>
<% end %>
<h3>娯楽時間</h3>
<ul>
<% @timehelpers.each do |timehelper| %>
<li><%= timehelper.content %></li>
<% end %>
</ul>
</div>
</div>
<div class="center jumbotron">
<div class="text-center">
<h1>Welcome to the Microposts</h1>
<%= link_to 'Sign up now!', signup_path, class: 'btn btn-lg btn-primary' %>
</div>
</div>
僕はindexに一つのformと複数のボタンをつけてindexにそのまま表示したいです、今は質問の時にコードを貼ったような感じで多対多の時に使えるnew.html
が必要ないformを使ってindexにかえすためにcontrollerをtimes_controllerだけでなく、timehelper_controllerも追加して、一つのformと二つのボタンを作っていたのですが、一つのcontrollerで複数のボタンをつけられるコードを調べたのですが、いい記事がな買ったので一つのformと複数のボタンを一つのcontrollerで表示することができる方法を教えてください!
回答待っています。
NoMethodError in TimesController#index
undefined method `logged_in?'
とのことで logged_in? というメソッドが定義されていないと認識されています。
認証機構は、どのように作成されましたか?
あなたの回答
tips
プレビュー