제가 작업하고있는 레일즈 4 프로젝트에 대한 코드가 있습니다. active_record (mysql2)를 사용하며, rails c
(프로덕션 또는 개발 환경)을 통해 상호 작용할 때 제대로 작동하는 has_many :through
관계가 있습니다. 내가 simple_form을 사용하고있는 형태로 관계를 제출하려고하면 저장하지 못하는 것 같습니다. 여기레일 4가 컨트롤러에서 작동하지 않습니다.
는 (정말 전체 소스를 표시 할 수 없습니다 단지 조각을 표시) 내 정보가 현재 설정 방법은 다음과 같습니다
모델 :
has_many :categorizations
has_many :resource_categories, through: :categorizations
accepts_nested_attributes_for :resource_categories
accepts_nested_attributes_for :categorizations
형태 :
= simple_form_for @resource do |f|
= f.association :resource_categories
컨트롤러 :
# POST /resources
# POST /resources.json
def create
@resource = Resource.new(resource_params)
set_categories(@resource, params[:resource][:resource_category_ids])
respond_to do |format|
if @resource.save
format.html {
redirect_to @resource, notice: 'Resource was successfully created.'
}
format.json {
render action: 'show', status: :created, location: @resource
}
else
format.html {
render action: 'new'
}
format.json {
render json: @resource.errors, status: :unprocessable_entity
}
end
end
end
# PATCH/PUT /resources/1
# PATCH/PUT /resources/1.json
def update
respond_to do |format|
if @resource.update(resource_params)
set_categories(@resource, params[:resource][:resource_category_ids])
format.html {
redirect_to @resource, notice: 'Resource was successfully updated.'
}
format.json {
head :no_content
}
else
format.html {
render action: 'edit'
}
format.json {
render json: @resource.errors, status: :unprocessable_entity
}
end
end
end
# Never trust parameters from the scary internet, only allow the white list
# through.
def resource_params
params.require(:resource).permit(
:title, :slug, :ancestry, :status, :author_id, :published, :parent_id,
:resource_category_ids, :preview, :body
)
end
def set_categories(resource, categories)
# Clean out the existing categories (if there are any)
unless resource.resource_categories.blank?
resource.resource_categories.each do |category|
resource.resource_categories.delete(category)
end
end
unless categories.blank?
categories.each do |category|
unless category.blank?
resource.resource_categories << ResourceCategory.find(category)
end
end
end
end
그것은 내 문제처럼 보인다
Resource.all.each do |resource|
ResourceCategory.all.each do |category|
resource.resource_categories << category
end
end
은 컨트롤러가 호출되지 않는 것입니다 : 나는 rails c -e production
(또는 그냥 일반 rails c
)를 사용하여 다음 명령 작동 실행하면(이 예에서는, 나는 모든 자원에 대한 모든 범주를 할당) 도우미 기능이 대신
감사합니다! 그럴 것이라고 생각했지만 불행히도 문제를 해결하지 못합니다. 무슨 일이 벌어지고 있는지는 카테고리를 지우는 비트가 실행 중입니다 (콘솔에서 일부를 채우고 편집 양식을 실행했는데 관계가 예상대로 지워졌습니다).하지만 '@ resource.resource_categories'가 채워지지 않습니다. 새로운 것들과의 관계. 그것을 축소 시키지만, 왜 아직도 작동하지 않는지 혼란 스럽습니다. –
채팅으로 토론 해 보겠습니다. http://chat.stackoverflow.com/rooms/48530/ror –
올바른 것으로 표시하십시오. Kirti Thorat와 함께 저를 고수해 주셔서 감사합니다! –