【发布时间】:2015-08-03 20:05:18
【问题描述】:
我有一个订阅表单,我试图在其中设置用户选择的计划、他们希望与订阅相关联的业务以及付款详细信息。在我的表单中,我使用一个选择标签来显示所有企业的列表,它在我的视图中正确显示,但保存后我收到以下错误:
undefined method `map' for #<Business:0x007f8ea7955b90>
new.html.erb
<div class="field">
<%= select_tag :business_id, options_from_collection_for_select(@businesses, "id", "name") %>
</div>
subscriptions_controller.rb
...
def new
@subscription = Subscription.new
@plan = Plan.find(params["plan_id"])
@businesses = Business.all
end
def create
@subscription = Subscription.new(subscription_params)
raise "Please, check subscription errors" unless @subscription.valid?
@subscription.process_payment
@subscription.save
redirect_to @subscription, notice: 'Subscription was successfully created.'
rescue => e
flash[:error] = e.message
render :new
end
private
def set_subscription
@subscription = Subscription.find(params[:id])
end
def subscription_params
params.require(:subscription).permit(:plan_id, :business_id, :card_token, :coupon)
end
我是否正确设置了 select_tag?我需要修复我的创建方法吗?在 SO 上查看了其他解决方案,但收效甚微。
【问题讨论】:
-
您能从错误堆栈跟踪的顶部添加一些行吗?我认为最多十行就足够了。
-
@amar47shah 上面的图片有帮助吗?
-
是的,这确实有帮助。看起来
create操作试图再次呈现new模板,可能是因为新订阅无效。请注意,render :new不会在控制器中调用new操作。不过,我仍然很难说出发生了什么事。看起来@businesses的值已经从一个集合变成了一个单一的业务,但我不知道为什么。仅出于调试目的,尝试在create操作的rescue块中再次设置@businesses = Business.all。哦等等,现在我有个主意了! -
@amar47shah 我正在提取业务集合,以便用户可以从我的所有业务中选择他们想要开始订阅的业务之一。
-
@amar47shah 你还有解决方法的想法吗?
标签: forms ruby-on-rails-4