Rails - проблема в создании модели - PullRequest
1 голос
/ 23 мая 2011

Я использую модель, которая принадлежит 2 другим моделям. Когда я пытаюсь его создать, мне удается получить оба идентификатора, но сам контент не сохраняется в базе данных

 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.

Ответы [ 3 ]

2 голосов
/ 23 мая 2011
@message = Message.create params[:message].merge(:group => Group.find(params[:group_id]), :person => Person.find(current_person))
1 голос
/ 23 мая 2011

@ почему ответ выше должен сделать это для вас. Но вы можете пойти на шаг выше и использовать силу ассоциаций.

В вашем 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
0 голосов
/ 23 мая 2011

Попробуйте изменить

 @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])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...