【问题标题】:Find object by ID in Rails 4 App在 Rails 4 App 中按 ID 查找对象
【发布时间】:2015-02-13 15:20:48
【问题描述】:

我使用Wicked 在我的rails 4 应用程序中构建了一个向导。我特别关注this guide,唯一的区别是我使用嵌套资源执行此操作。我的控制器操作遇到了困难,这些操作应该使用其 ID 来查找表单正在构建的对象。

应用程序的当前流程是用户单击创建对象的按钮并被重定向到向导的第一步,该向导在一系列步骤中更新对象。问题是我没有通过参数传递对象的 ID,因为我在 ID 字段中传递了向导的步骤。

创建对象的按钮

<%= link_to business_loan_application_path(@user), method: :post, :class => "btn btn-success" do %><% end
%>

LoanApplication 控制器

    def create
      @user = current_user
      @loanapplication = @user.loan_applications.new
      @loanapplication.save(validate: false)
      redirect_to business_loan_application_wizard_path(@user.id,LoanApplication.form_steps.first)
    end  

我需要以某种方式将 :loan_application_id 传递给 business_loan_application_wizard_path 参数。

错误

Couldn't find LoanApplication without an ID

LoanApplication belongs_to Business 通过 has_many 关系。

{"business_id"=>"55", "id"=>"business_details"}

business_details 是向导的第一步。这些是我第一次通过带有 put 请求的按钮创建对象时传递的参数。

向导控制器

class WizardController < ApplicationController
  include Wicked::Wizard
  before_filter :authenticate_user!
  before_filter :require_business

  steps *LoanApplication.form_steps

  def show
    @business = current_user
    @loanapplication = LoanApplication.find(params[:loan_application_id])
    render_wizard
  end

  def update
    @business = current_user
    @loanapplication = @business.loan_applications.last
    @loanapplication.update_attributes(loan_application_params(step))
    render_wizard @loanapplication
  end
end

【问题讨论】:

  • routes.rb 在这里会很有帮助!

标签: ruby-on-rails wicked-gem


【解决方案1】:

this question 的讨论帮助解决了这个问题。

改变了

resources :wizard

scope "loan_application/:loan_application_id" do
  resources :wizard
end

在我的 routes.rb 文件中。

我的向导控制器现在如下:

def show
  @business = current_user
  @loanapplication = LoanApplication.find(params[:loan_application_id])
  render_wizard
end

def update
  @business = current_user
  @loanapplication = LoanApplication.find(params[:loan_application_id])
  @loanapplication.update_attributes(loan_application_params(step))
  render_wizard @loanapplication
end

最后,贷款申请控制器重定向链接已更改:

def create
  @user = current_user
  @loanapplication = @user.loan_applications.new
  @loanapplication.save(validate: false)
  redirect_to business_loan_application_wizard_path(@user.id, LoanApplication.form_steps.first, :loan_application_id => @loanapplication.id) 
end

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2022-01-18
    相关资源
    最近更新 更多