3

ここからデータを送信したい

 class Employee::GeneralInformationsController < ApplicationController
to class EmployeeRegistersController < ApplicationController

employee_register.rb モデル

ここで、Employee::GeneralInformationsController の EmployeeRegister モデルからすべてのデータを取得したい Employee::GeneralInformation のコントローラはこのようなものです

class Employee::GeneralInformationsController < ApplicationController
  def index
    @employee_general_informations = EmployeeRegister.all
  end

  def show
    @employee_general_information = EmployeeRegister.find(params[:id])
  end

  def new
    @employee_general_information = EmployeeRegister.new
  end

  def edit
    @employee_general_information = EmployeeRegister.find(params[:id])
  end


  def create
    @employee_general_information = EmployeeRegister.new(params[:employee_general_information])

    respond_to do |format|
      if @employee_general_information.save
        format.html { redirect_to @employee_general_information, notice: 'General information was successfully updated.' }
        format.json { render json: @employee_general_information, status: :created, location: @employee_general_information }
      else
        format.html { render action: "new" }
        format.json { render json: @employee_general_information.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    @employee_general_information = EmployeeRegister.find(params[:id])

    respond_to do |format|
      if @employee_general_information.update_attributes(params[:employee_general_information])
        format.html { redirect_to @employee_general_information, notice: 'General information was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @employee_general_information.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @employee_general_information = EmployeeRegister.find(params[:id])
    @employee_general_information.destroy

    respond_to do |format|
      format.html { redirect_to employee_general_informations_url }
      format.json { head :no_content }
    end
  end
end

私のフォームはこんな感じです

<%= simple_form_for(@employee_general_information) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :first_name %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

問題は、データが Employee::GeneralInformationsController から EmployeeRegisters モデルに保存された後、従業員登録の表示ページにリダイレクトされることです。ただし、Employee::GeneralInformations 表示ページにリダイレクトする必要があります。どこが間違っていますか?

4

4 に答える 4

4

EmployeeRegister モデルである @employee_general_information にリダイレクトしています。したがって、EmployeeRegister#show に移動します。

別のコントローラーにリダイレクトする場合は、ルートまたはハッシュを使用します。

次のルートで:

namespace :employee do
  resources :general_informations
end

それで:

redirect_to employee_general_information_path

またはハッシュ付き:

redirect_to :controller => 'employee/general_informations', :action => 'show'
于 2013-01-24T23:01:07.203 に答える
2

Rails 3 で特定のコントローラーにリダイレクトする場合、名前付きルートまたは配列を使用してルートを構築する必要があります。

# Here is the routes that you need
namespace :employee do
  resources :employee_registers, :controller => 'employee/general_informations'
end

したがって、問題を解決するには、すべてのものを置き換える必要があります

redirect_to @employee_general_information

redirect_to [:employee, @employee_general_information]

#showこれはアクションにリダイレクトされますEmployee::GeneralInformationsController

もう1つ、フォームでコントローラーを指定する必要があります! このフォームのみを使用すると、Rails がオブジェクトのクラスを同じ名前 ( => ) のコントローラーにマップsimple_form_for(@employee_general_information)するため、データが送信されます。EmployeeRegistersControllermodel EmployeeRegisterEmployeeRegistersController

これを解決するには、フォームでこれを使用する必要があります

<%= simple_form_for([:employee, @employee_general_information]) do |f| %>
...

最終結果は次のようになります。

# Employee::GeneralInformationsController
def create
  @employee_general_information = EmployeeRegister.new(params[:employee_general_information])

  if @employee_general_information.save
    redirect_to [:employee, @employee_general_information],
                notice: 'General information was successfully updated.'
  else
    render action: "new"
  end
end

そして、フォームは

<%= simple_form_for([:employee, @employee_general_information]) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :first_name %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

詳細については、 http: //guides.rubyonrails.org/routing.html#controller-namespaces-and-routingを参照してください。

于 2013-01-20T17:17:11.737 に答える
2

Respond_to ブロックで、format.html の @employee_general_information を次のように削除してみてください。

def update
@employee_general_information = EmployeeRegister.find(params[:id])

respond_to do |format|
  if @employee_general_information.update_attributes(params[:employee_general_information])

    format.html ###goes to the default view for this action
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @employee_general_information.errors, status: :unprocessable_entity }
  end
 end
end
于 2013-01-17T08:31:36.967 に答える
2

ここに行きます:

あなたEmployee::GeneralInformationsControllerを注意深く見てください -

def create
    @employee_general_information = EmployeeRegister.new(params[:employee_general_information])

    respond_to do |format|
      if @employee_general_information.save
        format.html { redirect_to @employee_general_information, notice: 'General information was successfully updated.' }
        format.json { render json: @employee_general_information, status: :created, location: @employee_general_information }
      else
        format.html { render action: "new" }
        format.json { render json: @employee_general_information.errors, status: :unprocessable_entity }
      end
    end
  end

問題は:

save 後createメソッドでは、リダイレクトしていますが 、この変数はあなたではなくEmployeeRegisterモデルを指しています。作成後、レールで呼び出すデフォルトのメソッドはポインティングオブジェクトのメソッドであるため、EmployeeRegister の showにリダイレクトされます。@employee_general_informationEmployee::GeneralInformationsControllershow

そのEmployeeRegisterをどのように指しているのですか?

答えは次のとおりです。

Employee::GeneralInformationsControllerのcreateメソッドで定義された最初の行を再度確認してください。これは@employee_general_information = EmployeeRegister.new(params[:employee_general_information])

上記のコードでは、モデルのパラメーターを作成EmployeeRegisterし、対応するテーブルに保存しています。データを保存するモデルである Rails の慣例により、対応するコントローラーのshowメソッドは、それにリダイレクトすることによって呼び出されます。したがって、結果。

解決:

Employee::GeneralInformationsControllerの show メソッドにリダイレクトするには、コントローラーの show メソッドのルートを明示的に定義する必要があります。

rake routesを実行してパスを確認します

ただし、おそらく次のようになります。

 redirect_to(employee_general_information_path(params[:employee_general_information]))
于 2013-01-25T12:19:37.103 に答える