Rubby on Rails에서 형식으로 목적지를 보내는 방법에 대한 지정 (POST, PATCH)

12470 단어 erbRails

전제 조건


전제적으로 사용자와 관련된 컨트롤러 이름: Users, 모델: User
사용자 정보 데이터베이스 열기
id
name
email
integer
string
string
.

알 수 없는 일


사용자 로그인, 로그인 등 다양한 장소에서 표가 나온다.
이런거↓ Rails 튜토리얼 내용.

사용자의 동작이create라는 이름이라면, 등록된 경우 여기에 입력한 데이터를 사용하여post에서create로 보내는 동작을 사용합니다.
그리고 걸린 것은
· 폼에 전송된 데이터의 이름이 HTML의 어디에 연결되어 있는지
• 발송 버튼을 눌렀을 때의 동작과 Create 동작이 어디에 지정되었는지

양식에 전송된 데이터 및 Create 작업에 사용되는 변수에 대한 링크


로그인 화면의 HTML을 보십시오.
signup
<form class="new_user" id="new_user" action="/signup" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="dStrA86aGPc1kp8jqGNMcNMBE+Y1zBMR+4pshaErYfZeZUZ016a/lYG9TjTYMsy7SKhkdgyKtmoN1MpPskbcTg==" />

      <label for="user_name">Name</label>
      <input class="form_control" type="text" name="user[name]" id="user_name" />

      <label for="user_email">Email</label>
      <input class="form_control" type="email" name="user[email]" id="user_email" />

      <label for="user_password">Password</label>
      <input class="form_control" type="password" name="user[password]" id="user_password" />

      <label for="user_password_confirmation">Confirmation</label>
      <input class="form_control" type="password" name="user[password_confirmation]" id="user_password_confirmation" />

      <input type="submit" name="commit" value="Create my account" class="btn btn-primary" data-disable-with="Create my account" />
</form>
중요한 것은 각 창의'name'속성이 지정한 내용입니다.
name="user[mail]"인 경우 지정한 텍스트 상자는
이것은 사용자 모델의 "이메일"표시줄에 대응하는 데이터의 내용입니다.
라일스에는 컨트롤러 이름과 모델명을 사용해 마음대로 이름을 짓는 기능으로 가득하지만, 튜토리얼을 읽으면서'라일스 방법으로 이름을 지은 것'인지'임의의 개발자가 지은 이름'인지 이해하기 어렵다.나는 네가 설명해 줄 수 있기를 바란다.

보내기 단추를 눌렀을 때의 동작을 지정합니다


HTML에 대해 설명한 ERb 파일을 살펴보겠습니다.
버튼을 누른 후 Users 디렉터의 Create 작업을 수행하려고 합니다.
new.html.erb
<%= form_for(@user, url: signup_path) do |f| %>
 <%= render 'shared/error_messages' %>
  <%= f.label :name %>
  <%= f.text_field :name, class:'form_control' %>
  <%= f.label :email %>
  <%= f.email_field :email, class:'form_control' %>
  <%= f.label :password %>
  <%= f.password_field :password, class:'form_control' %>
  <%= f.label :password_confirmation, "Confirmation" %>
  <%= f.password_field :password_confirmation, class:'form_control' %>
  <%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
안 썼을 거예요.지정한 것은 <%form>나는 for (///의 부분이라는 것을 안다.
결론은form 단추를 눌렀을 때의 HTTP 방법은POST이고, 썼을 때@user는users 컨트롤러의 경우 아무것도 지정하지 않아도users의create 동작을 실행해야 한다는 것이다.

음반의 유무에 따라 신작(POST)이나 업데이트(Patch)를 구분한다.


그러나 이 코드는 Rails 자습서를 계속 읽는 경우 사용자가 새로 작성한 코드입니다.
사용자가 화면을 편집하는 코드는 다음과 같다.
edit.html.erb
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>
      <%= f.label :name %>
      <%= f.text_field :name, class:'form-control' %>
      <%= f.label :email %>
      <%= f.email_field :email, class: 'form-control' %>
      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>
      <%= f.label :password_confirmation %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>
      <%= f.submit "Save changes", class: "btn btn-primary" %>
    <% end %>
따로 방법이 없네.똑같네.
이것은 데이터베이스에 존재하는 기록(.save와.create 등이 저장될 때의 기록화)에 따라 방법을 결정한다.
새로 만든 페이지든 업데이트된 페이지든, 페이지를 열기 전에 (view에서 HTML을 묘사하기 전에)
컨트롤러를 사용하여 페이지와 관련된 정의 동작을 실행합니다.
users_controller.rb
#各ページを描写する前に実行するアクション
  #新規作成のとき
  def new
    @user = User.new #"新規の"ユーザを作成している
  end

  #更新のとき
  def edit
    @user = User.find(params[:id])#"既存の"ユーザを参照している
  end
그리고 다음view에서 묘사한 폼의 동작은 새 사용자인지 기존 사용자인지@user
포스터인지 패치인지 결정해.
새로운 사용자인지 기존 사용자인지 식별하는 방법은new_record?방법으로 구분하다.
> User.new.new_record?
=> true

> User.first.new_record?
  User Load (1.0ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> false

좋은 웹페이지 즐겨찾기