【问题标题】:Rails - passing object's idRails - 传递对象的 id
【发布时间】:2012-12-08 14:21:44
【问题描述】:

我正在使用 ruby​​ on rails 创建一个留言板站点。
我生成了两个脚手架:TopicForumTopic 属于Forum

当用户创建一个新主题时,我应该传递 forum_id(一个 GET 变量)。类似于:
http://example.com:3000/topics/new/1

然后,当用户提交表单时,他将 forum_id 与 POST 请求一起传回(通过隐藏的 html 字段?)。

正确的做法是什么?
谢谢

路线:

  resources :forums

  get "admin/index"

  resources :posts

  resources :topics

  resources :users

  match '/signup', :to => 'users#new'

  get   '/login', :to => 'sessions#new', :as => :login
  match '/auth/:provider/callback', :to => 'sessions#create'
  match '/auth/failure', :to => 'sessions#failure'

  match '/topics/new/:id', :to => 'topics#new'

【问题讨论】:

  • 这取决于您的路线配置,请您发布一下吗?

标签: ruby-on-rails ruby-on-rails-3 post web get


【解决方案1】:

一个很好的方法是将topics资源嵌套在forums资源中,如下所示:

resources :forums do
  resources :topics
end

然后在你的 TopicsController 中

class TopicsController < ApplicationController
  def new
    @forum = Forum.find params[:forum_id]
    @topic = Topic.new
  end

  def create
    @forum = Forum.find params[:forum_id] # See the redundancy? Consider using before_filters
    @topic = @forum.topics.build params[:topic]

    if @topic.save
      redirect_to @topic
    else
      render action: :new
    end
  end
end

最后在您的意见/主题/_form.html.erb 中:

<%= form_for [@forum, @topic] do |f| %>
  # Your fields
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多