Дополнительные переменные в форме - Rails - PullRequest
3 голосов
/ 11 декабря 2011

Я думаю, что я использую неправильный подход к этому и пытался найти лучший подход в Интернете, но пока не повезло.

У меня есть модель проектов, в которой много сообщений и пользователей.Сообщения принадлежат как проектам, так и пользователям (как показано ниже).Поэтому мне нужно передать как идентификатор проекта, так и идентификатор пользователя в форму сообщения.Я знаю, что это должно быть довольно просто, но я, очевидно, все испортил.Не уверен, что на данном этапе использование http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-hidden_field_tag обязательно является лучшей идеей.

Любая помощь будет отличной.

Модель проекта:

 class Project < ActiveRecord::Base
   belongs_to :user
   has_many :users
   has_many :messages, :dependent => :destroy
 end

Модель пользователя:

class User < ActiveRecord::Base
 attr_accessor :password
 attr_accessible :first_name, :last_name, :username, :email, :password, :password_confirmation

 has_many :projects
 belongs_to :projects
 has_many :messages
end

Модель сообщения:

 class Message < ActiveRecord::Base
   attr_accessible :title, :message
   belongs_to :project 
   validates :title, :presence => true
   validates :message, :presence => true
 end

Показ проектов:

  def show
    @project = Project.find(params[:id])
    @title = @project.title
    @curent_user = current_user
    @message = Message.new    
    begin
      @messages = @project.messages
    rescue ActiveRecord::RecordNotFound      
    end
  end

/ shared / _message.html.erb

  <%= form_for @message do |f| %> 
<%= f.label :title %>:
<%= f.text_field :title %><br>

<%= f.label :message  %>
<%= f.text_area :message  %>

<%= f.submit  %>

  <% end %>

Действие создания сообщения

 def create
   @message  = @project.messages.build(params[:message])
   if @message.save
     flash[:success] = "Message created!"
     redirect_to root_path
   else
     render 'pages/home'
   end
 end

Оцените ваше время, просто пытаясь определить, как я передаю user_id / project_id виз поля, поэтому оно передается при создании сообщения.

1 Ответ

1 голос
/ 11 декабря 2011

Установите project_id / user_id в контроллере, чтобы конечные пользователи не могли изменять их при отправке форм.

Поскольку вы используете @ project.messages.build в контроллере сообщений, создайте действиеИдентификатор проекта должен быть установлен автоматически.Затем вы можете установить пользователя с помощью @ message.user = @ current_user

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