我是Rails的新手,努力获得我的belongs_to协会的权利。我有一个应用程序,一幅绘画属于一位艺术家,一位艺术家可以拥有绘画。我可以创建和编辑我的绘画,但是除了通过控制台之外,我无法编辑或创建艺术家。通过很多谷歌搜索,我觉得我已经转身了。任何帮助将非常感激!无法在Rails 4中创建或更新belongs_to记录
这是我的routes.rb文件:
MuseumApp::Application.routes.draw do
resources :paintings
resources :paintings do
resources :artists
resources :museums
end
root 'paintings#index'
end
这里是我的绘画控制器
def show
@painting = Painting.find params[:id]
end
def new
@painting = Painting.new
#@artist = Artist.new
end
def create
safe_painting_params = params.require(:painting).permit(:title, :image)
@painting = Painting.new safe_painting_params
if @painting.save
redirect_to @painting
else
render :new
end
end
def destroy
@painting = Painting.find(params[:id])
@painting.destroy
redirect_to action: :index
end
def edit
@painting = Painting.find(params[:id])
end
def update
@painting = Painting.find(params[:id])
if @painting.update_attributes(params[:painting].permit(:title, :image)) #safe_params
redirect_to @painting
else
render :edit
end
end
下面是我的画的形式查看:
<%= form_for(@painting) do |f| %>
<fieldset>
<legend>painting</legend>
<div>
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div>
<%= f.label :image %>
<%= f.text_field :image %>
</div>
<%= form_for([@painting,@painting.create_artist]) do |f| %>
<div>
<%= f.label :Artist %>
<%= f.text_field :name %>
</div>
</fieldset>
<%= f.submit %>
<% end %>
<% end %>
艺术家控制器:
class ArtistsController < ApplicationController
def index
@artists = Artist.all
@artists = params[:q] ? Artist.search_for(params[:q]) : Artist.all
end
def show
@artist = Artist.find params[:id]
end
def new
@artist = Artist.new
end
def create
@painting = Painting.find(params[:painting_id])
@artist = @painting.create_artist(artist_params)
redirect_to painting_path(@painting)
end
def destroy
@artist = Artist.find(params[:id])
@Artist.destroy
redirect_to action: :index
end
def edit
@artist = Artist.find(params[:id])
end
def update
@painting = Painting.find(params[:painting_id])
@artist = @artist.update_attributes(artist_params)
redirect_to painting_path(@painting)
end
end
private
def artist_params
params.require(:artist).permit(:name)
end
索引视图:
<h1> Hello and Welcome to Museum App</h1>
<h3><%= link_to "+ Add To Your Collection", new_painting_artist_path %></h3>
<%= form_tag '/', method: :get do %>
<%= search_field_tag :q, params[:q] %>
<%= submit_tag "Search" %>
<% end %>
<br>
<div id="paintings">
<ul>
<% @paintings.each do |painting| %>
<li><%= link_to painting.title, {action: :show, id:painting.id} %> by <%= painting.artist_name %></li>
<div id = "img">
<br><%= link_to (image_tag painting.image), painting.image %><br>
</div>
<%= link_to "Edit", edit_painting_path(id: painting.id) %>
||
<%= link_to 'Destroy', {action: :destroy, id: painting.id},method: :delete, data: {confirm: 'Are you sure?'} %>
<% end %>
</ul>
</div>
你需要阅读嵌套属性 - 你不能只巢巢1表单另一 –
感谢并将继续谷歌和阅读Rails指南。这张表格看起来并不正确,但是当我“解除嵌套”时,我发现错误的是艺术家没有标题方法。 – edswartz