[Rails] 로그인 후 투고
로그인한 사용자를 통해 투고한 글의 이미지를 가져옵니다.
또 모델은 한 쌍이 많다.
여기 기사를 참고하세요.
https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1
사용자에게 투고하다.
전체 이미지
모델
Microsoft(출시)
content:string user:references
사용자
name:string amail:string password_digest:string
컨트롤러
마이크로 컨트롤러
toppages 컨트롤러
뷰
microposts
- 없음(create 및 destroy 기능만 해당)
toppages
-index(일람화면에 발언 내용의 표시, 발언 형식, 발언의 삭제 기능을 설치함)
모델 생성하기
위 열에 Micropost 및 User 모델을 생성합니다.
app/models/micropost.rb
class Micropost < ApplicationRecord
belongs_to :user
end
그렇다면 나는 이렇게 쓴 것 같다.
belongs_to :user
하나의 User가 여러 개의 Micropost를 발표하는 상황에서 Micropost는 하나의 User와 관련이 있다는 것을 말합니다!이렇게 하면 포착할 수 있다.예를 들면, "이 투고는 누가 쓴 것입니까?"이 경우 Micropost를 통해 User를 얻을 수 있습니다.
User 모델 봐봐.
app/models/user.rb
class User < ApplicationRecord
has_many :microposts
end
이쪽
has_many :microposts
하나의 User가 여러 개의 Micropost를 발표하는 상황에서 User는 여러 개의 Micropost와 관련이 있습니다!으로 이해할 수 있다.예를 들어 "누가 투고했습니까?"이 경우 User를 통해 Micropost를 얻을 수 있습니다.마이크로포스트는'많음'이기 때문에 복수 형식이다.
라우터
이제 라우터를 살펴보겠습니다.
config/routes.rbs
Rails.application.routes.draw do
root to: 'toppages#index'
resources :users, only: [:index, :show, :new, :create]
resources :microposts, only: [:create, :destroy]
end
이것은 투고(Microsoft) 기능에서 사용하는 루트 정보다.투고의 표시와 투고 화면은 투고 기능에 들어가지 않고 투고 기능은create와destory만 있다.
컨트롤러 및 뷰
첫 페이지
app/controllers/toppages_controller.rb
class ToppagesController < ApplicationController
def index
if logged_in?
@micropost = current_user.microposts.build
@microposts = current_user.microposts.order('created_at DESC').page(params[:page])
end
end
end
첫 페이지에 발언 목록을 만들고 표시합니다.
@micropost = current_user.microposts.build
발언 기능에 사용되는 코드입니다.current_사용자는 rails에서 제공하는 방법을 사용하여 현재 로그인한 사용자를 얻습니다.microposts.build은 모델이 정의한 마이크로posts를build (새로 만들기) 로 한다는 뜻입니다.
따라서 @micropost는 현재 로그인 중인 사용자가 마이크로포스터를 새로 만들기 위해 만든 상자를 말한다.
그 밖에
@microposts = current_user.microposts.order('created_at DESC').page(params[:page])
발언 목록이 작성되었습니다.제작된 마이크로포스터는order('create at DESC')의 제작 날짜와 시간 순서에 따라 배열되며 페이지(param[:page]) 페이지 기능(kaminari)이 첨부되어 있습니다.그럼 첫 페이지를 볼게요.
app/views/toppages/index.html.erb
<% if logged_in? %>
<%= form_for(@micropost) do |f| %>
<div class="form-group">
<%= f.text_area :content, class: 'form-control', rows: 5 %>
</div>
<%= f.submit 'Post', class: 'btn btn-primary btn-block' %>
<% end %>
<p>
<P>投稿内容</p>
<% @microposts.each do |micropost| %>
<div>
<%= link_to micropost.user.name, user_path(micropost.user) %> <span class="text-muted">posted at <%= micropost.created_at %></span>
</div>
<div>
<p><%= micropost.content %></p>
</div>
<% end %>
<% end %>
로그인 후 첫 페이지를 열면 발언 형식과 발언 내용이 표시됩니다.소박하지만 첫 페이지는 이런 화면으로 예정돼 있다.
(발언 기능이 설치되어 있지 않아 발언 내용이 표시되지 않아도 괜찮다.)
투고 기능
투고 기능을 살펴봅시다!
컨트롤러부터 봐.
마이크로포스터라는 이름으로 컨트롤러를 만들다.투고 기능에서 사용하는 동작은create와destroy뿐입니다.
app/controllers/microposts_controller.rb
class MicropostsController < ApplicationController
before_action :correct_user, only: [:destroy]
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = 'メッセージを投稿しました。'
redirect_to root_url
else
@microposts = current_user.microposts.order('created_at DESC').page(params[:page])
flash.now[:danger] = 'メッセージの投稿に失敗しました。'
render 'toppages/index'
end
end
def destroy
@micropost.destroy
flash[:success] = 'メッセージを削除しました。'
redirect_back(fallback_location: root_path)
end
private
def micropost_params
params.require(:micropost).permit(:content)
end
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
unless @micropost
redirect_to root_url
end
end
end
딱히 어려운 점은 없는 것 같아요.투고할 때
def micropost_params
params.require(:micropost).permit(:content)
end
를 참고하십시오.또한, 삭제 시
before_action :correct_user, only: [:destroy]
및
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
unless @micropost
redirect_to root_url
end
end
구문을 사용합니다.그럼 첫 페이지에 삭제 버튼을 붙여 보세요.
app/views/toppages/index.html.erb
<% if logged_in? %>
<%= form_for(@micropost) do |f| %>
<div class="form-group">
<%= f.text_area :content, class: 'form-control', rows: 5 %>
</div>
<%= f.submit 'Post', class: 'btn btn-primary btn-block' %>
<% end %>
<p>
<P>投稿内容</p>
<% @microposts.each do |micropost| %>
<div>
<%= link_to micropost.user.name, user_path(micropost.user) %> <span class="text-muted">posted at <%= micropost.created_at %></span>
</div>
<div>
<p><%= micropost.content %></p>
</div>
<div>
<% if current_user == micropost.user %>
<%= link_to "Delete", micropost, method: :delete, data: { confirm: "You sure?" }, class: 'btn btn-danger btn-xs' %>
<% end %>
</div>
<% end %>
<% end %>
투고와 삭제 모두 가능합니다!총결산
current_사용자로 로그인 중인 사용자와 투고 기능을 연결할 수 있습니다!
rails miso 부분인가요?
다음은 다대다기능에 대한 투고입니다. 가능하면 읽어주세요!!
Reference
이 문제에 관하여([Rails] 로그인 후 투고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gussan-dayo/items/434fd0e08d67b14471fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)