@ почему ответ выше должен сделать это для вас. Но вы можете пойти на шаг выше и использовать силу ассоциаций.
В вашем message.rb у вас будет ассоциация
class Message < ActiveRecord::Base
..
belongs_to :group
belongs_to :person
...
end
Вы также можете иметь аналогичную связь в моделях Group / Person, которая объявляет отношение has_many.
class Group < ActiveRecord::Base
...
has_many :messages
...
end
class Person < ActiveRecord::Base
...
has_many :messages
...
end
In rout.rb (Rails 2.3.x)
map.resources :group, :has_many => [:messages]
In rout.rb (Rails 3)
resources :groups do
resources :messages
end
Это даст вам маршрут, подобный
POST group_messages_path(:group_id) # => this will route to
# MessagesController's create action
# and provide params[:group_id]
Вы используете current_person, который, по-видимому, связан с текущим входом в систему, поэтому не стоит делать его видимым или редактируемым через URL или параметры. current_person должен быть получен из сеанса в самом действии create.
# form_for([@group,:message]) or form_for([@group,@message])
# automatically works out the path as POST /groups/:group_id/messages => MessagesController#create
# And current person association remains safe to currently logged in person
# without being revealed thru parameters and such.
<% form_for([@group,@message]) do |f| %>
<%= f.text_area :content %>
<%= f.submit "Submit" %>
<% end %>
def create
@group = Group.find(params[:group_id])
@person = current_person # or however you find current_person
@message = @group.messages.build(params[:messaage])
@message.person = @person
if @message.save
redirect_to(:back)
else
redirect_to(:back)
end
end