Rails-MessageBoard
5272 단어 Rails
Controller
rails generate controller messages index
- route.rbModel
rails generate model Message name:string body:string
- migration file- 데이터베이스 생성 및 수정 기능
필요 없음 - SQL
- db/schema.rb에 실행된migration 기록하기
rails db:migrate
resources :messages
리소스를 자동으로 생성하는 데 필요한 URL의 구조를 나타냅니다.
link_to에서 사용
_path의 경우 상대 경로
_URL을 추가한 경우 "http://~"
ERB
<%= code %>
결과를 문자열로 삽입하기 위해 코드를 실행합니다<% code %>
코드만 실행하고 결과는 삽입하지 않습니다* form_for(form helper)
* 특정 모델 객체를 작성 및 편집하는 데 사용되는 창을 자동으로 생성합니다.
* 모형 대상을 창과 연결시켜 창에 입력한 값을 모형 대상에게 분배하거나 편집할 때 저장된 값이나 오류를 모형 대상을 통해 창에 표시합니다
<form class="new_message" id="new_message" action="/messages" accept-charset="UTF-8" method="post">
resources :messages
의 기술을 추가했기 때문에form메시지 모델의 초기화 대상을 매개 변수로 for에 전달하면 메시지는 URL로POST는 form 태그의 속성으로 path, HTTP 방법으로 자동으로 설정됨f.text_field :name
type = "text"의 input 태그f.text_field :body
type = "text"의 input 태그f.submit
type = "submit"의 input 태그제작 절차
1. フォームに値を入力し送信ボタンを押すと /messages,URLにPOSTでリクエストがパラメータと共に送信される
2. routes.rbで設定したMessagesControllerのcreateアクションが呼ばれる
3. createアクションでnameと、bodyが含まれたパラメータ(message_params)を受け取る
4. Messageモデルのインスタンスを生成(Message.new)する
5. `@message.save`でDBへ保存
6. route URLにredirect
{ :message => {
:name => "名前の入力内容",
:body => "内容の入力内容"
}
}
의도하지 않은 param을 보낸 상태에서 검증을 진행합니다.부당한 조작을 방지하다.
private
def message_params
params.require(:message).permit(:name, :body)
end
params에 :message
키가 있는지 확인하고, 필터 키는 수신:name
과 :body
의 값만 받습니다.Bootstrap
app/views/layouts/application.html.erb
app/views/messages/index.html.erb
<form role="form">
<%= form_for(@message) do |f| %>
<div class="form-group">
<label for="exampleInputEmail1">Name:</label>
<%= f.text_area :name, :class => "form-control" %>
</div>
<div class="form-group">
<label for="exampleInputEmail1">Content:</label>
<%= f.text_area :body, :class => "form-control" %>
</div>
<%= f.submit class: "btn btn-sm btn-primary" %>
<% end %>
</form>
Validation
# 名前は必須入力かつ20文字以内
validates :name , length: { maximum: 20 } , presence: true
# 内容は必須入力かつ2文字以上30文字以下
validates :body , length: { minimum: 2, maximum: 30 } , presence: true
controller→발리 일 실패 시 error@messages = Message.all
flash.now[:alert] = "failed to save"
render 'index'
보기 - error 메시지 표시<% @message.errors.full_messages.each do |full_message| %>
<li>
<%= full_message %>
</li>
<% end %>
Update,Delete
resources :messages, except: [:index, :new]
#resources :messages, only: [:create, :show, :edit, :destroy, :update]
Link
link_to Link Name, Link URL
<%= link_to "edit" , edit_message_path(message) %>
edit_message_path(message)
→ /messages/message.id/edit
before_action
필터 기능은 모든 동작의 앞뒤 임의로 처리할 수 있다
params
컨트롤러 측면에서 사용자가 폼에서 보낸 파라미터를 수신하는 데 사용되는 산열
<%= link_to "edit" , edit_message_path(message)
%>→ /messages/message.id/edit
messages#edit
를 통해 도착1 대입
params[:id]
및 컨트롤러@message = Message.find(params[:id])
→ @message = Message.find(1)
Column 추가
rails g migration add_age_to_messages age:integer
model
added validation
view
added
message.age
<%= f.text_field :age, :class => "form-control" %>
controller
added strong parameter
Error,Debug
NoMethodError in …
AcitveRecord::RecordNotFound in …
Missing Template
컨트롤러 동작에 해당하는 뷰가 없습니다(ERB 파일).
Syntax Error
문법 오류
pry debugger
binding.pry
Reference
이 문제에 관하여(Rails-MessageBoard), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sunoko/items/0e95a07a90f0d5bd01bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)