其他控制器

时间:2016-06-21 20:10:00

标签: ruby-on-rails ruby-on-rails-4

我想从其他控制器创建,编辑和删除db实体,而不是由scaffold生成。我希望在没有重定向的情况下进行验证,创建和删除。我不想使用生成的控制器,因为我想从一个控制器创建至少两种类型的实体。

现在我创建了没有重定向但我没有关于实体创建的通知。

此控制器应支持crud操作:

class SmartHomeController < ApplicationController

  layout 'smart_home'

  def index
    @name = 'Home';
  end

  def settings
    @name = 'Settings';

    @place = Place.new;

    @all_places = Place.all;

    respond_to do |format|
      if @place.save
        format.html { redirect_to @place, :notice => 'A was successfully created.' }
      else
        # render new with validation errors
        format.html { render :action => "settings" }
      end

    end
  end
end

脚手架生成的控制器:

class PlacesController < ApplicationController
  before_action :set_place, only: [:show, :edit, :update, :destroy]

  # GET /places
  # GET /places.json
  def index
    @places = Place.all
  end

  # GET /places/1
  # GET /places/1.json
  def show
  end

  # GET /places/new
  def new
    @place = Place.new
  end

  # GET /places/1/edit
  def edit
  end

  # POST /places
  # POST /places.json
  def create
    @place = Place.new(place_params)

    respond_to do |format|
      if @place.save
        format.html { redirect_to smart_home_settings_path, notice: 'Place was successfully created.' }
        format.json { render :show, status: :created, location: @place }
      else
        format.html { render :new }
        format.json { render json: @place.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /places/1
  # PATCH/PUT /places/1.json
  def update
    respond_to do |format|
      if @place.update(place_params)
        format.html { redirect_to @place, notice: 'Place was successfully updated.' }
        format.json { render :show, status: :ok, location: @place }
      else
        format.html { render :edit }
        format.json { render json: @place.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /places/1
  # DELETE /places/1.json
  def destroy
    @place.destroy
    respond_to do |format|
      format.html { redirect_to places_url, notice: 'Place was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_place
      @place = Place.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def place_params
      params.require(:place).permit(:name, :hw)
    end
end

你能指导我如何实现这个目标吗?

编辑。新代码。

页:

<div class="demo-cards mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet mdl-grid mdl-grid--no-spacing"
     style="width: 420px">
  <div class="demo-updates mdl-card mdl-shadow--2dp mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--12-col-desktop">
    <div class="mdl-card__title mdl-card--expand mdl-color--teal-300">
      <h2 class="mdl-card__title-text">All places</h2>
    </div>
    <div class="mdl-card__supporting-text mdl-color-text--grey-600">
      <ul class="demo-list-item mdl-list">

        <% @all_places.each do |place| %>
            <li class="mdl-list__item">
              <span class="mdl-list__item-primary-content">
                <%= place.name %>: <%= place.hw %> <%= link_to 'Destroy', place, controller: 'smart_home', action: 'delete_place', data: { confirm: 'Are you sure?' } %>
              </span>
            </li>
        <% end %>
      </ul>
    </div>
  </div>
</div>

<div class="demo-cards mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet mdl-grid mdl-grid--no-spacing"
     style="width: 420px">
  <div class="demo-updates mdl-card mdl-shadow--2dp mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--12-col-desktop">
    <div class="mdl-card__title mdl-card--expand mdl-color--teal-300">
      <h2 class="mdl-card__title-text">Create place</h2>
    </div>
    <div class="mdl-card__supporting-text mdl-color-text--grey-600">

      <table class="mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp create-place-table">
        <%= form_for @place, url:  smart_home_create_path  do |f| %>
            <tr>
              <td>
                <div class="mdl-textfield mdl-js-textfield">
                  <%= f.label :name, 'Name', class: 'mdl-textfield__label' %>
                  <%= f.text_field :name, class: 'mdl-textfield__input' %>
                </div>
              </td>
            </tr>
            <tr>
              <td>
                <div class="mdl-textfield mdl-js-textfield">
                  <%= f.label :hw, class: 'mdl-textfield__label' %>
                  <%= f.text_field :hw, class: 'mdl-textfield__input' %>
                </div>
              </td>
            </tr>
            <tr>
              <td>
                <%= f.submit "Create", class: 'mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect' %>
              </td>
            </tr>
        <% end %>
      </table>
    </div>
  </div>
</div>

控制器:

class PlacesController < ApplicationController
  before_action :set_place, only: [:show, :edit, :update, :destroy]

  # GET /places
  # GET /places.json
  def index
    @places = Place.all
  end

  # GET /places/1
  # GET /places/1.json
  def show
  end

  # GET /places/new
  def new
    @place = Place.new
  end

  # GET /places/1/edit
  def edit
  end

  # POST /places
  # POST /places.json
  def create
    @place = Place.new(place_params)

    respond_to do |format|
      if @place.save
        format.html { redirect_to smart_home_settings_path, notice: 'Place was successfully created.' }
        format.json { render :show, status: :created, location: @place }
      else
        format.html { render :new }
        format.json { render json: @place.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /places/1
  # PATCH/PUT /places/1.json
  def update
    respond_to do |format|
      if @place.update(place_params)
        format.html { redirect_to @place, notice: 'Place was successfully updated.' }
        format.json { render :show, status: :ok, location: @place }
      else
        format.html { render :edit }
        format.json { render json: @place.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /places/1
  # DELETE /places/1.json
  def destroy
    @place.destroy
    respond_to do |format|
      format.html { redirect_to smart_home_settings_path, notice: 'Place was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_place
      @place = Place.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def place_params
      params.require(:place).permit(:name, :hw)
    end
end

删除有效,但没有确认:

页:

<%= link_to 'Destroy', delete_place_path(id: place.id), data: {:confirm => 'Are you sure?'}, :method => :delete %>

控制器:

def delete_place
    place = Place.find(params[:id])
    place.destroy

    respond_to do |format|
      format.html { redirect_to smart_home_settings_path, notice: 'Place was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

路线:

  get 'delete_place/:id' => 'smart_home#delete_place', as: :delete_place

编辑:

Javascript include错过了

<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>

0 个答案:

没有答案