我刚刚整理了关于has_many的模型间关系:through和belongs_to;我还使用迁移将所需的id字段添加到数据库表中。
我的问题是:用户点击链接后:
<%= link_to "subscribe", new_subscription_path(feed_url: @feed.feed_url)%>
我在新方法中这样做:
def new
feed_url = params[:feed_url]
@subscription = Subscription.new
redirect_to reader_url, notice: "You are now subscribed to: "+Feed.find_by_feed_url(feed_url).title
end
我只是无法弄清楚我应该如何以及在哪里调用我的create方法,因为我希望订阅链接在我的订阅表中创建一个新行。
另外,为确保我的表格正确,这是我的关联:
User has_many :feeds, :through => :subscriptions, dependent: :destroy
| Users表格包含列:id
Subscription belongs_to :feed
Subscription belongs_to :user
|订阅表包含列:id,user_id,feed_id
Feed has_many :users, :through => :subscriptions
| Feeds表有列:id
答案 0 :(得分:4)
你刚刚打破了REST的整个想法
new
操作用于向用户显示某种表单,用于填充正在创建的资源的详细信息。甚至HTTP-verb GET
(您可以在日志中看到new
操作)表示它启动的操作不应修改任何资源。
如果您不需要任何表单,则可以为create
操作创建直接“访问者”。但是不要通过link_to
进行,因为如果没有启用JavaScript,您的用户将无法正常点击它。使用button_to
:
button_to 'Create', resources_path(your_params)
然后在create
操作中定义创建本身。