2016-03-05 50 views
0

问题:当我访问create.save时,出现错误ActionController::UnknownFormat in GuestsController#create,通过记录保存。任何想法如何摆脱它?用CRUD设计模型

我:

  • rails g devise guest;
  • rails g controller guests适用于CRUD界面。

guests_controller.rb:

class GuestsController < ApplicationController 
    before_action :set_guest, only: [:show, :edit, :update, :destroy] 
    def new 
    @guest = Guest.new 
    end 
    def edit 
    @guest = Guest.find(params[:id]) 
    end 
    def create 
    respond_to do |format| 
     @guest = Guest.new(guest_params) 
     if @guest.save 
     redirect_to guests_path, notice: 'Client was successfully created.' 
     else 
     render :new 
     end 
    end 
    end 

    def update 
    #update without changing password 
    if params[:guest][:password].blank? 
     params[:guest].delete(:password) 
     params[:guest].delete(:password_confirmation) 
    end 
    #usual actions 
    @guest = Guest.find(params[:id]) 
    if @guest.update_attributes(guest_params) 
     sign_in(@guest, :bypass => true) if @guest == current_guest 
     redirect_to guests_path, notice: 'Client was successfully updated.' 
    else 
     render :edit 
    end 
    end 

    private 
    def set_guest 
     @guest = Guest.find(params[:id]) 
    end 
    def guest_params 
     params.require(:guest).permit(:email, :password, :password_confirmation) 
    end 
end 

可能有一些在注册/控制器重定向...

我试过路线devise_for :guests, controllers: { registrations: 'guest_registrations' } + guest_registrations_controller.rb

class GuestRegistrationsController < Devise::RegistrationsController 
    protected 

    def after_sign_up_path_for(guest) 
    guests_path # Or :prefix_to_your_route 
    end 
end 

,但什么也没做

回答

1

您正在使用respond_to但你说的不是响应格式

试试这个:

def create 
    respond_to do |format| 
     format.html do 
     @guest = Guest.new(guest_params) 
     if @guest.save 
      redirect_to guests_path, notice: 'Client was successfully created.' 
     else 
      render :new 
     end 
     end 
    end 
end 

的响应格式可以:json, :html, :xml, :js

更多更好的版本比上面:

def create 
    respond_to do |format| 
     @guest = Guest.new(guest_params) 
     if @guest.save 
      format.html { redirect_to guests_path, notice: 'Client was successfully created' } 
      format.json {render json: @guest} 
     else 
      format.html { render :new } 
      format.json { render json: @guest.errors.full_messages, status: :bad_request } 
     end 
    end 
end 
+0

它的工作:)我想我有相同的添加到'update'行动。谢谢,Rahul –

+0

是的,如果你要处理多个响应格式。 –