开发者

Rails: Accessing data of other SQL table in View

开发者 https://www.devze.com 2023-04-12 01:37 出处:网络
I don\'t understand how access data from my View in other table. I have few models. First is User, second is UsersPreferences. So i have settings page for users and code looks like this:

I don't understand how access data from my View in other table.

I have few models. First is User, second is UsersPreferences. So i have settings page for users and code looks like this:

<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
  <%= f.label        :name %><br />
  <%= f.text_field   :name %>
</div>
...
<div class="checkbox">
  <%= f.check_box :notification_about_new_followers %>                        
  <%= f.label     'Notify via email about new followers' %><br />
</div>

This code works (User has row notification_about_new_followers) but i want to change it. I decided that better way is keep preferences in other table. So i created model UsersPreferences which has user_id and flag 'notify_about_new_followers'. I tried to rewrite my view like that:

<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
  <%= f.label        :name %><br />
  <%= f.text_field   :name %>
</div>
...
<div class="checkbox">
  <%= f.check_box UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers %>                        
  <%= f.label     'Notify via email about new followers' %><br />
</div>

But when i visit page with code i get such error

undefined method `true' for #<User:0x007f8ac180dee8>

How can i solve this error?

User model:

class User < ActiveRecord::Base
  attr_accessible :name, ... , :notification_about_new_followers
  ...
  has_one  :users_preferences
end

UsersPreferences model:

class UsersPreferences < ActiveRecord::Base
  belongs_to :user, :class_name => "User"
  attr_accessible :notify_about_new_follower开发者_如何学JAVAs
end


This line:

<%= f.check_box UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers %>

is causing the error. UsersPreferences.find_by_user_id(@user.id).notify_about_new_followers is true, so essentially that line reads:

<%= f.check_box true %>

And like the error says, there is no 'true' attribute for your UserPreferences model.

To fix this you'll need to first read up on MVC (Model-View-Controller). Without knowing how MVC works, you'll never be able to move forward with Rails. There are a lot of great resources out there, just google "Model View Controller for rails". Here is a good one. A little goofy, though... if that's not your style, try another link.

After you have learned that, look up the rails helper fields_for, and there you will find your answer.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号