@爲什麼我們回答上述應該爲你做。但你可以走一步以上,並利用協會的力量。
在你message.rb,你會聯想
class Message < ActiveRecord::Base
..
belongs_to :group
belongs_to :person
...
end
你也可以在組/人車型類似的協會,聲明瞭一個的has_many關係。
class Group < ActiveRecord::Base
...
has_many :messages
...
end
class Person < ActiveRecord::Base
...
has_many :messages
...
end
在的routes.rb(Rails的2.3.x版本)
map.resources :group, :has_many => [:messages]
在的routes.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應該從創建操作本身的會話中派生。
# 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
當您在模型上調用'create'方法時,它會將其保存到數據庫中。可能需要調用'new'來初始化新實例。或者,如果您喜歡'create'方法 - 使用'new_record?'來查看它是否保存了一些實例(由於驗證失敗或類似情況)。 – taro 2011-05-23 09:13:13