2011-05-23 59 views
1

我正在使用屬於另外兩個模型的模型。當我嘗試創建它,我設法讓這兩個ID,但內容本身並不存儲在數據庫導軌 - 創建模型時出現問題

def create 
    @person = Person.find(current_person) 
    @message = Message.create(:group => Group.find(params[:group_id]), :person => Person.find(current_person)) 
    if @message.save 
     redirect_to(:back) 
    else 
     redirect_to(:back) 
    end 
    end 



<% form_for(:message, :url => messages_path(:person_id => current_person.id, :group_id => @group.id)) do |f| %> 
<%= f.text_area :content %> 
<%= f.submit "Submit" %> 
<%end %> 

此外,content被設置爲數據庫中的文本,我使用PostgreSQL。

+0

當您在模型上調用'create'方法時,它會將其保存到數據庫中。可能需要調用'new'來初始化新實例。或者,如果您喜歡'create'方法 - 使用'new_record?'來查看它是否保存了一些實例(由於驗證失敗或類似情況)。 – taro 2011-05-23 09:13:13

回答

2
@message = Message.create params[:message].merge(:group => Group.find(params[:group_id]), :person => Person.find(current_person)) 
0

嘗試改變

@message = Message.create(:group => Group.find(params[:group_id]), :person => Person.find(current_person)) 

@message = Message.create(:group => Group.find(params[:group_id]), :person => Person.find(current_person), :content => params[:content]

1

@爲什麼我們回答上述應該爲你做。但你可以走一步以上,並利用協會的力量。

在你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