다음 양식 및 컨트롤러를 사용 중입니다. 새로운 알림을 작성하면 campus_id를 제외한 모든 정보가 저장됩니다.collection_select를 사용하는 양식, 편집 작업이 완전히 작동하지만 작성되지 않음
드롭 다운에서 다른 것을 선택했지만 잘못된 캠퍼스 매개 변수를 제공하는 것으로 보입니다. 나중에 동일한 항목을 편집하면 저장됩니까? 무슨 일이 일어나고 어떻게 해결할 수 있습니까?
동일한 양식이 편집 및 만들기 작업에 사용됩니다. (일부 임)
캠퍼스 (has_many) 및 알림 (belongs_to)에 얕은 경로를 사용한다는 점에 유의할 필요가 없습니다.
routes.rb
shallow do
resources :campus do
resources :notifications
end
end
형태 :
<%= form_for [@campus,@notification] do |f| %>
<% if @notification.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@notification.errors.count, "error") %> prohibited this notification from being saved:</h2>
<ul>
<% @notification.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :post %><br>
<%= f.text_area :post %>
</div>
<div class="field">
<%= f.label :campus %><br>
<%= f.collection_select(:campus_id, Campus.all.order('name ASC'), :id, :name, prompt: true) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
이것은 컨트롤러 :
내가 잘못된 매개 변수가 comitted 것을 볼 로그를 보면class NotificationsController < ApplicationController
before_action :set_notification, only: [:show, :edit, :update, :destroy]
before_action :set_campus, only: [:index, :new, :create]
def index
@notifications = @campus.notification
end
def show
end
def new
@notification = @campus.notification.new
end
def edit
end
def create
@notification = @campus.notification.new(notification_params)
respond_to do |format|
if @notification.save
format.html { redirect_to @notification, notice: 'Notification was successfully created.' }
format.json { render action: 'show', status: :created, location: @notification }
else
format.html { render action: 'new' }
format.json { render json: @notification.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @notification.update(notification_params)
format.html { redirect_to @notification, notice: 'Notification was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @notification.errors, status: :unprocessable_entity }
end
end
end
def destroy
@notification.destroy
respond_to do |format|
format.html { redirect_to campu_notifications_url(1) }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_notification
@notification = Notification.find(params[:id])
end
def set_campus
@campus = Campus.find(params[:campu_id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def notification_params
params.require(:notification).permit(:post, :campus_id)
end
end
.
은 84.193.153.106은 "/ 캠퍼스/1/통지"2014년 9월 29일 18시 29분 33초 0000가 POST를 시작 에서 "/ 캠퍼스/1/통지"84.193.153.106를 들어 POST 시작 2014-09-29 18:29:33 +0000 NotificationsController로 처리 # HTML 처리로 작성 NotificationsController # HTML로 작성 매개 변수 : { "utf8"=> "_", "authenticity_token"=> "oNSlEFeukwEj2hIAT89wFdIYwjHO5c8lzBlCqMyk31Y =", "notification", "campu_id"=> "1"} "notification"=> { "post"=> "sdqfdsfd", "campus_id"=> "3"} "커밋"=> "utf8"=> "_", "authenticity_token"=> "oNSlEFeukwEj2hIAT89wFdIYwjHO5c8lzB "commit"= ""Create "Notification", "campu_id"=> "1"} ","0123, 캠퍼스로드 위치 캠퍼스로드 (0.4ms) 선택 "캠퍼스". * "캠퍼스"위치 "캠퍼스". "id"= $ 1 LIMIT 1 [[ "id", "1"] 캠퍼스로드 (0.4ms) (0.1ms)BEGIN (0.1ms) BEGIN SQL (28.6ms) INSERT INTO "이 캠퍼스에서"ID "= $ 1 LIMIT 1 [["id ","1 "]] 알림 "("campus_id ","created_at ","post ","updated_at ") VALUES ($ 1, $ 2, $ 3, $ 4)"id "[[" "campus_id", 1 ", created_at" , 2014 년 9 월 29 일 18:29:34 UTC +00 : 00], [ "post", "sdqfdsfd"], [ "updated_at", 월 9 월 29 일 2014 18:29:34 UTC +00 : 00]] SQL (28.6ms) INSERT INTO "알림"("campus_id", "created_at", "post_", updated_at ") VALUES ($ 1, $ 2, $ 3, $ 4)"id "[[" "campus_id", 1], [ "created_at", 월, 29 2014 년 9 월:29:34 UTC +00 : 00], [ "post", "sdqfdsfd"], [updated_at], 월 9 월 29 일 2014 18:29:34 UTC +00 : 00]] (3.5 밀리) (3.5ms)이
모든 것이 올바르게 보입니다. 양식을 제출하는 동안 log/development.log를 살펴보십시오. 그것은 도움이 될 수 있습니다! – Rodrigo