2013-02-26 1 views
0

У меня очень небольшое приложение, которое я создаю в рельсах. Это простое приложение для отслеживания веса. Я создал модель User, у которой есть страница для регистрации. Как только пользователь входит в систему, они перенаправляются на вид user#show. Вот контроллер пользователя до сих пор:Можно добавить форму в другой вид модели в рельсах

class UsersController < ApplicationController 
before_filter :authenticate_user! 

def show 
    @user = current_user 
end 

end 

У меня есть 2 другие модели один является Weight модели, а другой Goal модели, я хотел бы это так, что, когда пользователь подписывает они представлены с просьбой экрана их ввести текущий вес и вес цели, эта информация будет храниться в моделях Weight и Goal соответственно вместе с зарегистрированным ID пользователя.

До сих пор я был в состоянии добавить форму в шаблон пользователя show.html.erb:

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

    <%= f.fields_for :weight do |builder| %> 
    <fieldset> 
     <%= f.label :value, "Current weight" %><br /> 
     <%= f.text_field :value %><br /> 
    </fieldset> 
    <% end %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Что делает форму правильно, но когда я затем нажмите на кнопку отправки он просто переходит на страницу с ошибкой, говоря Unknown action- The action 'update' could not be found for UsersController , Я предполагаю, что я делаю что-то неправильно, так как он должен попробовать и отправить действие create.

Есть ли кто-нибудь, кто мог бы помочь мне вернуться по правильному пути, Im очень много noob в рельсах.

ответ

0

Вы используете помощник в form_for Rails и переходя @user к нему, потому что @user является постоянной моделью (сохранение в БД), то генерируется форма будет иметь действие на /users/:id с PUT методом, поэтому запрос будет отправлен в действие по имени update в вашем UsersController, кажется, что вы не имеете, что действие, указанное в вашем UsersController

должно быть Somthing как следующее:

def update 
    @user = Users.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
    # do something if saving succeeds 
    else 
    # do something if saving fails 
    end 
end 
+0

О, я так понимаю, как бы лучше вставить значение веса и цели в их соответствующие таблицы? –

+0

Я просто добавил в этом коде и получил следующее сообщение об ошибке: '{ "utf8"=> "✓", "_method"=> "положить", "authenticity_token"=> "ciFbrD782Q + fS9h8gSZxHD2fEBlWoTVFTT2asHhcpPQ =", " user "=> {" weight "=> {" value "=>" 1.5 "}}, « commit »=>« Обновить пользователя », « id »=>« 1 »}' Кажется, пытаясь сохранить значение ценности весовой модели в пользовательской таблице. Как я могу сделать это так, чтобы он сохранял свою собственную таблицу. –

+0

как @Khaled сказал, вы создаете переменную экземпляра @user для сохранения в таблице пользователя. То же самое можно сделать с остальными: Weight, Goal и т. Д. Я бы сделал это с использованием пользовательского хеша, а именно: '@ weight.update_attributes ({: value1 => params [: user] [: value1] ,: value2 => params [: пользователь] [: значение2]}) ' – kasperite

2

Ну, это не имеет никакого отношения ко всем вашим моделям. Это относится к тому факту, что вы не определили метод update в вашем контроллере.

Если вы сделали это, посмотрите на accepts_nested_attributes_for, если вы хотите вложить модели.

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

+0

было бы лучше, чтобы создать еще один контроллер с именем, например, приборную панель и использовать индекс действие, чтобы иметь эту форму? В основном я старался держать его как можно меньше. –

+0

В этом (и почти любом другом) случае: подумайте 1 страницу, 1 модель. – harm

+0

Большое спасибо, очень признателен. –

0

Я считаю, аф ter ищет этот вопрос, имеющий похожие проблемы, что это не обновление, которое отсутствует, но редактирование.

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

def edit 

    @user = User.find(params[:id]) 

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