我有资源
User #from devise
Stream
Subscription
在我的routes.rb文件中,我将订阅作为用户的嵌套资源。
resources :users do
resources :subscriptions
end
在Stream#show视图中,我有一个按钮,可以将@ stream.title保存到@ subscription.title。
<%= button_to "Subscribe", subscriptions_path(@subscription), :class => "button", :method => :post , :remote=>true %>
在我的订阅控制器
中def create
@stream = Stream.friendly.find(params[:stream_id])
@subscription = current_user.subscriptions.create(subscription_params)
@subscription.title = @stream.title
@subscription.save
respond_to do |format|
if @subscription.save
format.html { redirect_to @subscription, notice: 'Subscription was successfully created.' }
format.json { render :show, status: :created, location: @subscription }
else
format.html { render :new }
format.json { render json: @subscription.errors, status: :unprocessable_entity }
end
end
end
耙路
POST /users/:user_id/subscriptions(.:format) subscriptions#create
在我的Stream #index视图中,我想显示@ subscription.title的
<tbody>
<% for subscription in @subscriptions %>
<tr>
<td><%= subscription.title %></td>
</tr>
<% end %>
在我的Streams Controller中
def index
@streams = Stream.search(params)
@subscriptions = current_user.subscriptions.build(subscription_params)
end
我已为每个订阅添加了一个参考索引
class AddIndexes < ActiveRecord::Migration
def change
add_reference :subscriptions, :user, index: true
end
end
我在Streams#show,undefined method'aleverptions_path'中收到NoMethodError。 StreamsController中的NameError #index,未定义的局部变量或方法'subscription_params'
答案 0 :(得分:0)
您获得了未定义的方法subscriptions_path,因为rails会将您的format.html { redirect_to @subscription, notice: 'Subscription was successfully created.' }
错误翻译。将您的@subscription
更改为正确的帮助path
电话。如果您不确定应在此处提供什么,则可能需要在shell中运行rake routes > routes.txt
并在那里找到您的subscriptions
路由定义,并使用_path
您获得未定义的方法subscription_params
,因为很可能您没有在任何地方定义subscription_params
。您最希望访问订阅参数,例如params[:subscription]
。至于访问params
哈希时的正确密钥,这一切都取决于您在视图中构建表单的方式。
答案 1 :(得分:0)
<%= button_to "Subscribe", subscriptions_path(@subscription), :class => "button", :method => :post , :remote=>true %>
上面的资源不存在,您只在用户内部定义了嵌套资源订阅。
所以你应该使用嵌套资源 user_subscriptions_path 代替这样的东西。
<%= button_to "Subscribe", user_subscriptions_path(@subscription), :class => "button", :method => :post , :remote=>true %>