РЕДАКТИРОВАТЬ Два: Журнал сервера:
Started POST "/users" for IPADDRESS at 2019-01-15 11:02:29 +1100
Processing by Users::UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"TOKEN", "search_address"=>{"search_address"=>"1 Dr Carlton B Goodlett Pl, San Francisco, CA 94102, USA"}, "commit"=>"Save Search Address"}
User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 24]]
Redirected to http://localhost:3000/
Filter chain halted as :require_no_authentication rendered or redirected
Completed 302 Found in 19ms (ActiveRecord: 1.6ms)
РЕДАКТИРОВАТЬ : Быстрая заметка, но в пользовательских контроллерах у них нет вызова before_action. И я хочу, чтобы только пользователи logged_in имели доступ к странице поиска и методу обновления.
Получение цепочки фильтров, прерванной во вложенной форме ресурса. Что мне добавить в приведенном ниже коде, чтобы убедиться, что отправленная форма сохранена в соответствующей таблице?
У меня есть модель «Пользователь и адрес поиска», цель состоит в том, чтобы пользователь мог ввести адрес, сохраненный в таблице адресов поиска. Моя проблема, как только пользователь отправляет форму, я получаю ошибку аутентификации.
Я прочитал в стеке о добавлении чего-то такого, как:
prepend_before_filter :require_no_authentication, only: [:cancel ]
Но я не уверен, куда его поместить и даже тогда, где бы я поместил его в свой код? Я поместил код ранее в моем контроллере пользователя и получил последующие ошибки. Следовательно, почему мне интересно знать, есть ли другой способ решить мою проблему или, если нет, что я должен делать правильно, используя приведенный выше код.
Я удалил некоторый код, чтобы его было легче понять.
Вид:
<%= semantic_form_for @user do |f| %>
<%= fields_for :search_address, @user.build_search_address do |g| %>
<div class="field">
<%= g.label :search_address, 'Search Address' %>
<br/>
<%= g.text_field :search_address, :class => "form-control" %>
</div>
<% end %>
<%= f.submit 'Save Search Address' %>
<% end %>
Схема:
create_table "search_addresses", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "search_address"
t.float "latitude"
t.float "longitude"
t.integer "user_id"
end
add_index "search_addresses", ["user_id"], name: "index_search_addresses_on_user_id", using: :btree
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "address"
t.string "username"
end
Модель пользователя:
class User < ActiveRecord::Base
has_one :search_address, dependent: :destroy, :foreign_key => 'user_id'
accepts_nested_attributes_for :search_address
geocoded_by :address, :latitude => :latitude, :longitude => :longitude
after_validation :geocode
end
Поиск модели адреса:
class SearchAddress < ActiveRecord::Base
belongs_to :user, :foreign_key => 'user_id'
geocoded_by :search_address, :latitude => :latitude, :longitude => :longitude
end
Пользовательский контроллер:
def search_page
@user = User.new
@user.build_search_address
end
def update
@users = User.find(params[:id])
@users.update_attributes!(user_params)
redirect_to :back
end
def user_params
params.require(:user)
params[:user].permit(:email, search_addresses_attributes: [:search_address])
end
end