Aks*_*hay 8 html ruby forms ruby-on-rails
我是红宝石的新手.我有相同的形式,但我需要它在需要时执行创建/更新.我现在的问题是,每当我调用编辑而不是编辑现有用户的详细信息时,我将获得一个包含已编辑详细信息的新用户.简单来说,我想每当我执行编辑时,都会调用create方法.
那么是否有任何方法可以使用单个表单进行新建和编辑,而不是使用单独的表单.
以下代码用于编辑用户详细信息:
         <%= link_to 'Home', root_path %>
        <h2>Edit user</h2>
        <%= form_for :user, url: user_index_path do |f| %>
          <p>
            <%= f.label :name %><br>
            <%= f.text_field :name %>
          </p>
          <p>
            <%= f.label :address %><br>
            <%= f.text_area :address %>
          </p>
         <p>
            <%= f.label :email %><br>
            <%= f.text_field :email %>
          </p> 
         <p>
            <%= f.label :phone %><br>
            <%= f.text_field :phone %>
          </p>
          <p>
            <%= f.label :state %><br>
            <%= f.text_field :state %>
          </p>
          <p>
            <%= f.label :country %> 
            <%= f.collection_select(:country, Country.all, :name, :name) %>
          </p>
          <p>
            <%= f.submit %>
          </p>
        <% end %>
以下代码用于创建用户:
        <%= link_to 'Home', root_path %>
    <h2>Create new user</h2>
    <%= form_for :user, url: user_index_path do |f| %>
      <p>
        <%= f.label :name %><br>
        <%= f.text_field :name %>
      </p>
      <p>
        <%= f.label :address %><br>
        <%= f.text_area :address %>
      </p>
     <p>
        <%= f.label :email %><br>
        <%= f.text_field :email %>
      </p> 
     <p>
        <%= f.label :phone %><br>
        <%= f.text_field :phone %>
      </p>
      <p>
        <%= f.label :state %><br>
        <%= f.text_field :state %>
      </p>
      <p>
        <%= f.label :country %> 
        <%= f.collection_select(:country, Country.all, :name, :name) %>
      </p>
      <p>
        <%= f.submit %>
      </p>
    <% end %>
这是我的控制器:
      class UserController < ApplicationController
    def index
        @users = User.all
    end
    def show
    @user = User.find(params[:id])
  end
    def new
        @user = User.new
    end
    def create
    @user = User.new(user_params)
        if @user.save
            redirect_to @user
        else
            render 'new'
        end 
    end
  def edit
    @user = User.find(params[:id])
  end
    def update
    #@user = User.find(params[:id])
        if @user.update(user_params)
        redirect_to @user
    else
      render 'edit'
    end
    end
    def destroy
    @user = User.find(params[:id])
    @user.destroy
      redirect_to user_index_path
  end
    private
    def user_params
        params.require(:user).permit(:name, :address, :email, :phone, :state, :country)
    end
end
因为我是ruby的新手,所以我没有得到关于http请求如何在ruby中运行的确切细节.
Vru*_*war 11
用户/ _form.html.erb
  <%= link_to 'Home', root_path %>
  <%= form_for @user do |f| %>
  <p>
  <%= f.label :name %><br>
  <%= f.text_field :name %>
  </p>
  <p>
  <%= f.label :address %><br>
  <%= f.text_area :address %>
  </p>
  <p>
  <%= f.label :email %><br>
  <%= f.text_field :email %>
  </p> 
  <p>
  <%= f.label :phone %><br>
  <%= f.text_field :phone %>
  </p>
  <p>
  <%= f.label :state %><br>
  <%= f.text_field :state %>
  </p>
  <p>
  <%= f.label :country %> 
  <%= f.collection_select(:country, Country.all, :name, :name) %>
  </p>
  <p>
  <%= f.submit %>
  </p>
  <% end %>
用户/ new.html.erb
<h2>Create new user</h2>
<%= render 'form' %>
用户/ edit.html.erb
<h2>Edit user</h2>
<%= render 'form' %>
users_controller.rb
class UsersController < ApplicationController
  before_filter :find_user, only: [:show, :edit, :update, :destroy]
  def index
    @users = User.all
  end
  def show    
  end
  def new
    @user = User.new
  end
  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render 'new'
    end 
  end
  def edit
  end
  def update
    if @user.update(user_params)
      redirect_to @user
    else
      render 'edit'
    end
  end
  def destroy
    @user.destroy
    redirect_to user_index_path
  end
  private
  def user_params
    params.require(:user).permit(:name, :address, :email, :phone, :state, :country)
  end
  def find_user
    @user = User.find(params[:id])
  end
end
如果您有两个或更多方法的相同视图代码,则应创建相同视图代码的部分视图代码并在这些方法中呈现它.这在轨道上的红宝石中称为干燥原理
| 归档时间: | 
 | 
| 查看次数: | 13573 次 | 
| 最近记录: |