2013-02-20 2 views
4

У меня есть проект, который принадлежит Пользователю. В моем представлении пользователя у меня есть ссылка для добавления нового проекта с параметром для пользователя, к которому я хочу добавить проект.Сохранять параметры после рендеринга Ruby on Rails

<%= link_to 'Add new project', :controller => "project", :action => "new", :id => @user %> 

Url: /projects/new?id=62 

Добавление проекта к пользователю работает. Проблема заключается в том, когда валидация терпит неудачу при добавлении нового проекта, и я делаю рендеринг.

def create 

    @project = Project.new(params[:project]) 

    if @project.save 
     redirect_to :action => "show", :id => @project.id 
    else 
     render :action => "new" 
    end 

end 

вид:

<%= form_for @project do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.hidden_field :user_id , :value => params[:id] %> 

    <%= f.submit "Create project" %> 
<% end %> 

маршруты

resources :users do 
resources :projects 
end 

Как я могу сохранить параметр для пользователя после рендеринга? Или есть лучший способ сделать это? Смотрел на множество подобных вопросов, но не мог заставить его работать.

ответ

1

попробовать

render :action => "new", :id => @project.id 

, если его не работает для вас, то попробуйте альтернативный способ передать параметр в вашей визуализации действия.

Это также может помочь вы-> Rails 3 Render => New with Parameter

+0

Не работает для меня .. –

+0

какая версия рельсов вы используете? –

1

Вы не должны использовать params[:id], чтобы присвоить значение этого поля формы. Вместо этого добавьте в ваш #new действия в контроллере:

def new 
    @project = Project.new(user_id: params[:id]) 
end 

, а затем просто написать это в виде:

<%= f.hidden_field :user_id %> 

Поскольку @project был определен в ваших #new и #create действий и, поскольку он уже содержит Объект проекта с присвоенным ему user_id, это значение будет автоматически добавлено в это поле.

Смежные вопросы