1

我正在使用 ruby​​ on rails 创建一个留言板站点。
我生成了两个脚手架:TopicForum. Topic属于_to 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'
4

1 回答 1

2

一个很好的方法是将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 %>
于 2012-12-08T14:35:43.720 回答