Rails - редактирование моделей пользователя и профиля из отдельного контроллера настроек - PullRequest
0 голосов
/ 24 сентября 2018

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

 class User
 class Profile

Один пользователь имеет один профиль.

У меня также естьКонтроллер настроек с действиями «профиль» и «обновление»:

class SettingsController < ApplicationController

  def profile
    @profile = User.find_by_id(current_user).profile
  end

  def update
    set_profile
    respond_to do |format|
      if @profile.update(profile_params)
        format.html { redirect_to @profile, notice: 'Profile was successfully updated.' }
      else
        format.html { render :edit }
      end
    end
  end

  private
    def profile_params
      params.require(:profile).permit(:name)
    end

end

и страница / настройки / профиля:

<h1>Settings</h1>
<div>

  <div>
    Name: <%= @profile.name %>
  </div>
  <%= form_with(model: @profile, local: true) do |form| %>

    <div class="field">
      <%= form.label :username %> 
      <%= form.text_field :username %>
    </div>

    <div class="field">
      <%= form.label :surname %> 
      <%= form.text_field :surname %>
    </div>

    <div class="actions">
      <%= form.submit %>
    </div>
  <% end %>

</div>

Мои маршруты:

get 'settings/profile', to: 'settings#profile', as: :settings_profile
post 'settings/profile', to: 'settings#update', as: :update_settings_profile

Какя могу получить свою форму (из SettingsController), чтобы разрешить поля для моих моделей пользователей и профилей?

* Изменить

Я изменил свой путь_профиля для извлечения из имени пользователя:

def profile_path(profile)
  '/' + 'profiles' + '/' + profile.user.username
end

В настоящее время, когда я загружаю страницу, содержащую форму, я получаю эту ошибку:

wrong number of arguments (given 2, expected 1)

1 Ответ

0 голосов
/ 24 сентября 2018

Когда вы определяете форму как <%= form_with(model: @profile, local: true) do |form| %>, она эквивалентна <form action="/profiles/1" method="post" data-remote="false">.Вам нужно указать Rails для сопоставления формы с пользовательским URL примерно так

<%= form_with(model: @profile, url: update_settings_profile_path, local: true)

И вам нужно белый список username и surname вprofile_params для отражения изменений в БД.

def profile_params
  params.require(:profile).permit(:username, surname)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...